1.环境搭建安装
设置代理
go env -w GOPOXY=https://goproxy.io,direct
下载gin框架
在终端中输入:
go get -u github.com/gin-gonic/gin
指定端口:在3001端口运行
r.Run(":3001")
2.请求处理
创建引擎(二者都可用于创建引擎)
router1 = gin.Default( )
router2 = gin.New( )
GET请求
r.GET("/user/list/:name", func(c *gin.Context) {
//获得路劲参数
name := c.Param("name")
var datalist []List
//查询数据库
db.Where("name= ?", name).Find(&datalist)
//判断是否查询到数据
if len(datalist) == 0 {
c.JSON(200, gin.H{
"msg": "没有查询到数据",
"code": 400,
"data": gin.H{},
})
} else {
c.JSON(200, gin.H{
"msg": "成功查询到数据",
"code": 200,
"data": datalist,
})
}
})
POST请求
r.POST("/user/add", func(c *gin.Context) {
var data List
err := c.ShouldBindJSON(&data)
if err != nil {
c.JSON(200, gin.H{
"msg": "添加失败",
"data": gin.H{},
"code": 400,
})
} else {
//数据库的操作
db.Create(&data) //创建一条数据
c.JSON(200, gin.H{
"msg": "添加成功",
"data": data,
"code": 200,
})
}
})
DELETE请求
r.DELETE("/user/delete/:id", func(c *gin.Context) {
var data []List
//接受id
id := c.Param("id")
//判断id是否存在
db.Where("id=?", id).Find(&data)
//存在则删除,不存在则报错
if len(data) == 0 {
c.JSON(200, gin.H{
"msg": "id没有找到,删除失败",
"code": 400,
})
} else {
//操作数据库删除
db.Where("id=?", id).Delete(&data)
c.JSON(400, gin.H{
"msg": "删除成功",
"code": 200,
})
}
})
PUT请求
r.PUT("/user/update/:id", func(c *gin.Context) {
var data List
id := c.Param("id")
db.Select("id").Where("id=?", id).Find(&data)
//判断id是否存在
if data.ID == 0 {
c.JSON(200, gin.H{
"msg": "用户id没有找到",
"code": 400,
})
} else {
err := c.ShouldBindJSON(&data)
if err != nil {
c.JSON(200, gin.H{
"msg": "修改失败",
"code": 400,
})
} else {
db.Where("id = ?", id).Updates(&data)
c.JSON(200, gin.H{
"msg": "修改成功",
"code": 200,
})
}
}
})
关于数据绑定
1.ShouldBindQuery 可以实现 GET方式的数据请求绑定
2.ShouldnBind 可以实现 POST 方式的数据请求绑定
3.ShouldBindJson 可以绑定json格式的数据提交
err := context.ShouldBindQuery(& )
err := context.ShouldBind(& )
err := context.ShouldBindJson(& )
3.使用路由组分组处理请求
在项目开发中,接口前缀往往都是相同的,可以使用路由组进行分类管理
注册:http://localhost:9000/user/register
登录:http://localhost:9000/user/login
用户信息:http://localhost:9000/user/info
删除:http://localhost:9000/user/1001
RouterGroup 称为路由组,在gin定义为结构体
type RouterGroup struct {
Handlers HandlersChain
basePath string
engine *Engine
root bool
}