Gin学习笔记

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
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值