Bootstrap

gin框架学习笔记

gin框架学习笔记

官网review

  1. gin 是用go编写的web框架,由于httprputer(基于radix树路由)速度快了40倍,支持中间件,路由组处理,json等多方式验证,内置了json/xml/html等渲染,是一个易于使用的go 框架
  2. 如果是用常量,比如http.statusOk impport “net/http”
  3. gin使用默认的encoding/json作为默认的json包,但是可以通过其他标签构建改变他 (jsoniter: https://github.com/json-iterator/go)
    Replace(性能更棒)
import "encoding/json"
json.Marshal(&data)

with

import jsoniter "github.com/json-iterator/go"

var json = jsoniter.ConfigCompatibleWithStandardLibrary
json.Marshal(&data)

Replace

import "encoding/json"
json.Unmarshal(input, &data)

with

import jsoniter "github.com/json-iterator/go"

var json = jsoniter.ConfigCompatibleWithStandardLibrary
json.Unmarshal(input, &data)

4.gin默认开启msgPack渲染功能,关闭这个功能通过建立指定nomsgpack标签

 go build -tags=nomsgpack .

5.参数

 // path
 name := c.Param("name")
// query
firstname := c.DefaultQuery("firstname", "Guest")
lastname := c.Query("lastname")
// body
// Content-Type: application/x-www-form-urlencoded
message := c.PostForm("message")

6.中间件

// 默认创建一个没有任何中间件的路由器
	r  :=  gin . New ()
	r.Use(gin.Logger())
  1. 模型绑定和验证
    将请求body绑定请求类型,支持绑定,json,xml,yaml和
    Gin 使用go-playground/validator/v10进行验证(https://github.com/go-playground/validator)
    __NOTE: __ 需要绑定相应的标签在所有的字段上,如果想要绑定的话
    gin tingeing2种设置方式去绑定(一定要绑定和应该要绑定)
  2. 一定要绑定
    方法:Bind, BindJSON, BindXML, BindQuery, BindYAML, BindHeader
    行为: 如没有绑定将导致请求中指,并且使用c.AbortWithError(400, err).SetType(ErrorTypeBind)
  3. 应该要绑定
    方法: ShouldBind, ShouldBindJSON, ShouldBindXML, ShouldBindQuery, ShouldBindYAML, ShouldBindHeader
    行为:这些方法ShouldBindWith在后台使用。如果存在绑定错误,则返回错误,开发人员有责任适当地处理请求和错误。
// 默认创建一个没有任何中间件的路由器
type Login struct {
   
	User     string `form:"user" json:"user" xml:"user"  binding:"required"`
	Password string `form:"password" json:"password" xml:"password" binding:"required"`
}

func main() {
   
	router := gin.Default()

	// Example for binding JSON ({"user": "manu", "password": "123"})
	router.POST("/loginJSON", func(c *gin.Context) {
   
		var json Login
		if err := c.ShouldBindJSON(&json); err != nil {
   
			c.JSON(http.StatusBadRequest, gin.H{
   "error": err.Error()})
			return
		}

		if json.User != "manu" || json.Password != "123" {
   
			c.JSON(http.StatusUnauthorized, gin.H{
   "status": "unauthorized"})
			return
		}

		c.JSON(http.StatusOK, gin.H{
   "status": "you are logged in"
;