关于它

  1. gin 是Go语言写的一个web框架,可提供 http RestFul API 服务。
  2. 性能超强,运行速度号称较httprouter要快40倍。封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点。
  3. 英文文档中文文档

hello word

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

  1. package main
  2. import "github.com/gin-gonic/gin"
  3. func main() {
  4. gin.SetMode(gin.ReleaseMode) //设置模式,设置模式要放在调用Default()函数之前
  5. engine := gin.Default()
  6. engine.GET("/ping", func(c *gin.Context) {
  7. c.JSON(200, gin.H{
  8. "message": "pong",
  9. })
  10. })
  11. engine.Run("127.0.0.1:8001") // listen and serve on 0.0.0.0:8080
  12. }

一些函数介绍

SetMode()

设置gin模式。参数可以传递:gin.DebugMode、gin.ReleaseMode、gin.TestMode。

Default()

gin.Default() 这个方法内部代码,默认是加载了一些框架内置的中间件的:
image.png
可以看到运行了 LoggerRecovery 两个中间件

  1. Logger
  2. //logger实例一个将日志写入gin.defaultwriter的logger中间件。
  3. //默认情况下,gin.defaultwriter=os.stdout。
  4. Recovery
  5. // Recovery returns a middleware that recovers from any panics and writes a 500 if there was one.
  6. //recovery返回一个中间件,该中间件可以从任何崩溃中恢复,且则写入500。

New()

该函数不加载任何中间件,根据需要自己手动加载中间件。

  1. engine.Use(MiddleWare)


自定义Http服务配置

Run方法,我们可以看到内部实际是调用了"net/http" 包的http.ListenAndServe方法。继续追踪,内部又调用了 "net/http" 包的 Server.ListenAndServe()
image.png
那么重点来了,这个 Serverstruct是做什么的? 通过查看源码,我发现这个 struct内部实际上设置了一些配置,比如ReadTimeout WriteTimeout MaxHeaderBytes ,这些配置还是非常有用的,那如果自己配置。demo如下:

  1. func main() {
  2. router:= gin.Default()
  3. s:= &http.Server{
  4. Addr: ":8080",
  5. Handler: router,
  6. ReadTimeout: 10 * time.Second,
  7. WriteTimeout: 10 * time.Second,
  8. MaxHeaderBytes: 1 << 20,
  9. }
  10. s.ListenAndServe()
  11. }

社区