## 使用gin , mysql
一、下载所需资源包
先进行golang环境配置
下载gin框架
cmd窗口执行命令
go get -u github.com/gin-gonic/gin
下载关于mysql的驱动
go get -u github.com/go-sql-driver/mysql
下载sqlx
go get -u github.com/jmoiron/sqlx
二、创建数据库连接池,并连接数据库
import (
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/jmoiron/sqlx"
)
// 数据库连接池
var db *sqlx.DB
func InitDB() (err error) {
dsn := "用户名:密码@tcp(127.0.0.1:3306)/数据库名称"
// 也可以使用MustConnect连接不成功就panic
db, err = sqlx.Connect("mysql", dsn)
if err != nil {
fmt.Printf("connect DB failed, err:%v\n", err)
return
}
db.SetMaxOpenConns(20)
db.SetMaxIdleConns(10)
return
}
SetMaxOpenConns :表示最大连接数
SetMaxIdleConns :最小连接数
三、封装数据库请求
## 使用查询语句后返回查询到的列表
type Book struct {
Book_id int
Book_name string
Book_price int
Book_author string
Book_presence string
}
// 查询所有数据
func SelectAllGet() (bookList []Book, err error) {
if db == nil {
panic("数据库连接尚未初始化")
}
var books []Book
var users Book
// sql语句
sqlStr := "select * from book"
err = db.Select(&books, sqlStr)
if err != nil {
return
}
return books, err
}
## 上述代码与数据库连接池再同一文件下
四、在main函数中设置gin
import (
"fmt"
httpsql "project/ginBook/http"
"github.com/gin-contrib/cors"
"github.com/gin-gonic/gin"
)
func main() {
//程序启动连接数据库
err := httpsql.InitDB()
//初始化
if err != nil {
fmt.Printf("初始化连接失败 err=%v\n", err)
return
}
// 创建路由
r := gin.Default()
// 设置请求头
setHeaders := func(c *gin.Context) {
c.Request.Header.Set("Access-Control-Allow-Origin", "*")
c.Request.Header.Set("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, token, Accept")
// 可以在这里添加其他请求头的设置
}
// 将自定义中间件应用到路由上
r.Use(setHeaders)
// 使用CORS中间件
r.Use(cors.Default())
// //各个路由
r.GET("/book/list", booklListHandle) //查询书籍
r.Run(":8080")
}
## 引入数据库文件,并且使用 InitDB()方法,初始化数据库。
## 使用setHeaders 设置请求头为* 全部都能通过
func booklListHandle(c *gin.Context) {
// 查询书籍操作
bookList, err := httpsql.SelectAllGet()
if err != nil {
c.JSON(500, gin.H{
"code": 500,
"message": err,
})
}
c.JSON(200, gin.H{
"code": 200,
"message": bookList,
})
}
## 使用gin框架的(c *gin.Context)进行接收参数和返回数据
五、启动程序
在终端输入 go run main.go
就可以在浏览器进行访问http://localhost:8080/book/list 就可测试获取数据是否成功