gin quick start

[TOC]

变量说明:

  • ctx = gin.Context
  • r := gin.Engine() or r:= gin.Default()

注意事项

初始化相关

  • 禁止带颜色的console输出: gin.DisableConsoleColor()
  • 运行模式,prod环境要记得设置mode=release
    • export GIN_MODE=release
    • gin.SetMode(gin.ReleaseMode)
  • mode=release或通过gin.Default()创建引擎时,默认有如下操作:
    • Logger middleware will write the logs to gin.DefaultWriter and By default gin.DefaultWriter = os.Stdout
    • Recovery middleware recovers from any panics and writes a 500 if there was one.
  • 设置KEEP_ALIVE: httpServer := &http.Server{Handler: router,}
  • 写路由时不要带尾巴的"/"
  • json采用json-iter: go build -tags=jsoniter

路由

中间键

  • 中间键有以下几种运用方式:
    • 单个中间键:engine.Use(middleware)
    • 组中间键:
      g = engine.Group("/")
      g.Use(middleware)
  • 内置的中间键
    • gin.Logger()
    • gin.Recovery()

Model binding and validation

  • 预备知识点:https://www.jianshu.com/p/2f38fdfcfbec
  • 相关的基本概念:
    • Binding 接口:
      • Name(): 声明是属于哪类型, json, xml, form-urlencoded, multipart/form-data, msgpack, protobuf
      • Bind(): 提供给gin.Context 调用,BindJSON --> MustBindWith --> ShouldBindWith --> Bind() --> jsonBinding/xmlBinding/protobufBinding... --> validate() --> StructValidator --> validator.defaultValidator . 原理本质上将所有的数据格式,转化成struct, 再调用validator.defaultValidator.ValidateStruct(obj)
    • StructValidator: validator in go,StructValidator负责调用validator里面的内容
  • 在gin中的使用步骤:

middleware

  • 每个endpoint 维护一个 Handlers (类型: gin.HandlersChain),如果要增加全局的middleware,必须在最开始执行: r.Use(middleware)
  • 为每个endpoint 增加middleware: r.Get(endponit, middleware1, middleware2, your_bussiness_func)
  • 用于组的middleware: group := r.Group("/admin", middleware1, m2, ...)

启动方式

基于内建的http方式启动

router := gin.Default()
http.ListenAndServe(":8080", router)

或者

router := gin.Default()
s := &http.Server{
    Addr:           ":8080",
    Handler:        router,
    ReadTimeout:    10 * time.Second,
    WriteTimeout:   10 * time.Second,
    MaxHeaderBytes: 1 << 20,
}
s.ListenAndServe()

gin 方式启动

r := gin.New()
r.Run()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容