Gin快速入门 (1)| 青训营笔记

127 阅读2分钟

Gin是什么

Gin 是一个用 Go 编写的 HTTP web 框架。它就像java中的springMVC框架,由于使用了go语言内置的httprouter,速度比另一款goWeb框架martini提高了近 40 倍。

Gin快速入门

1.使用命令快速安装

go get -u github.com/gin-gonic/gin

2.引入gin包到你的代码中

import "github.com/gin-gonic/gin"

Gin基本使用

1.基础使用

import "github.com/gin-gonic/gin"

func main() {
	r := gin.Default()
	r.GET("/ping", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"msg": "ok",
		})
	})
	r.Run(":8090") // 修改端口号, 默认8080
}

访问127.0.0.1:8090/ping路径就可以得到响应 可以通过r.GET r.POST r.DELETE r.PUT等方法来控制请求方法

2.请求参数的获取

1.获取URL中的参数Params
// 此规则能够匹配 /user/hello这种格式,但不能匹配 /user/ 或 /user 这种格式
router.GET("/user/:name", func(c *gin.Context) {
  name := c.Param("name")
  c.String(http.StatusOK, "Hello %s", name)
})

访问127.0.0.1:8080/user/hello路径就可以得到响应Hello hello

2.获取URL中的Query参数
// 匹配的url格式: /hello?name=mike&lastname=Davie
router.GET("/hello", func(c *gin.Context) {
  firstname := c.DefaultQuery("name", "Guest") // 此方法可以设置默认值
  lastname := c.Query("lastname")

  c.String(http.StatusOK, "Hello %s %s", name, lastname)
})

访问127.0.0.1:8080/hello/name=mike&lastname=Davie路径就可以得到响应Hello mike Davie

3.获取POST参数
router.POST("/hellot", func(c *gin.Context) {
  message := c.PostForm("message")
  name := c.DefaultPostForm("name", "mike") // 此方法可以设置默认值

  c.JSON(200, gin.H{
    "code":  "200",
    "message": message,
    "name":    nick,
  })
})

PostForm方法可以获取到body中的参数,c.JSON方法可以将要返回的数据转为json格式并返回,项目中也用的比较多

4.参数绑定

type Student struct {
   Name string `binding:"required"` //注意此处添加了binding注解,便于测试
}

func main() {
   r := gin.Default()
    
   //使用ShouldBindQuery
   r.GET("/student1", func(c *gin.Context) {
      var student Student
      if err := c.ShouldBindQuery(&student); err != nil {
         c.JSON(http.StatusOK, gin.H{"msg": "fail"})
      } else {
         fmt.Println(student)
         c.JSON(http.StatusOK, gin.H{"msg": "success"})
      }
   })
    
   //使用BindQuery
   r.GET("/student2", func(c *gin.Context) {
      var student Student
      if err := c.BindQuery(&student); err != nil {
         c.JSON(http.StatusOK, gin.H{"msg": "success"})
      } else {
         c.JSON(http.StatusOK, gin.H{"msg": "fail"})
      }
   })
    
   r.Run(":8080")
}

经过测试 使用使用BindQuery绑定模型时,如果发生绑定错误,则会自动返回400响应状态码,并且Content-Type 被设置为 text/plain; charset=utf-8 所以一般实际项目中使用的是ShouldBindQuery,出现错误时方便自己手动管理。