使用gin写一个简单get接口
需求:把订单数据返回给前端
1.下载并安装gin
go get -u github.com/gin-gonic/gin
2.结构目录如下
对数据库的操作写在model文件夹中
3.mysql.go用来连接数据库,代码如下
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
"log"
"time"
)
var MysqlDb *sql.DB
var MysqlDbErr error
const (
USER_NAME = "root"
PASS_WORD = "root"
HOST = "127.0.0.1"
PORT = "3306"
DATABASE = "demo"
CHARSET = "utf8"
)
// 初始化链接
func init() {
dbDSN := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s", USER_NAME, PASS_WORD, HOST, PORT, DATABASE, CHARSET)
// 打开连接失败
MysqlDb, MysqlDbErr = sql.Open("mysql", dbDSN)
//defer MysqlDb.Close();
if MysqlDbErr != nil {
log.Println("dbDSN: " + dbDSN)
panic("数据源配置不正确: " + MysqlDbErr.Error())
}
// 最大连接数
MysqlDb.SetMaxOpenConns(100)
// 闲置连接数
MysqlDb.SetMaxIdleConns(20)
// 最大连接周期
MysqlDb.SetConnMaxLifetime(100 * time.Second)
if MysqlDbErr = MysqlDb.Ping(); nil != MysqlDbErr {
panic("数据库链接失败: " + MysqlDbErr.Error())
}
}
4.做好这些准备后 我们开始在model文件下创建get.go
//对应数据库字段
type OrderList struct {
Id int `json:"id"`
OddNum string `json:"odd_num"`
BoxNum string `json:"box_num"`
ResponsName string `json:"res_name"`
State string `json:"state"`
CreateTime string `json:"create_time"`
}
func (o *OrderList) List() (err error,ols []OrderList) {
list := []OrderList{}
//查询所有订单数据
row,err :=MysqlDb.Query("select * from t_order_list")
//判错
if err != nil {
fmt.Println(err)
return err,nil
}
//遍历写入
for row.Next(){
item := OrderList{}
err = row.Scan(&item.Id,&item.OddNum,&item.BoxNum,&item.ResponsName,&item.State,&item.CreateTime)
if err != nil {
fmt.Println(err)
return err,nil
}
list = append(list,item)
}
return nil,list
}
5.在controller文件夹下创建get.go 代码如下
import (
"demo/model"
"fmt"
"github.com/gin-gonic/gin"
)
func List(c *gin.Context) {
i := model.OrderList{}
err,is :=i.List()
if err != nil {
fmt.Println(err)
c.JSON(200,nil)
return
}
c.JSON(200,is)
}
到现在为止查询的逻辑就写完了,只需要在main 方法下调用就可以了
6.main.go
package main
import (
"demo/controller"
"demo/middle"
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
//router.Use(middle.Cors()) //cors 跨域
router.Use(gin.Recovery())
//路由分组
v1 :=router.Group("/v1")
{
//调用方法
v1.GET("/get",controller.List)
}
router.Run(":8000")
}
调用一下接口就可以了