关于它
- gin 是Go语言写的一个web框架,可提供 http RestFul API 服务。
- 性能超强,运行速度号称较httprouter要快40倍。封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点。
- 英文文档;中文文档。
hello word
go get -u github.com/gin-gonic/gin
package mainimport "github.com/gin-gonic/gin"func main() {gin.SetMode(gin.ReleaseMode) //设置模式,设置模式要放在调用Default()函数之前engine := gin.Default()engine.GET("/ping", func(c *gin.Context) {c.JSON(200, gin.H{"message": "pong",})})engine.Run("127.0.0.1:8001") // listen and serve on 0.0.0.0:8080}
一些函数介绍
SetMode()
设置gin模式。参数可以传递:gin.DebugMode、gin.ReleaseMode、gin.TestMode。
Default()
gin.Default() 这个方法内部代码,默认是加载了一些框架内置的中间件的:
可以看到运行了 Logger ,Recovery 两个中间件
Logger//logger实例一个将日志写入gin.defaultwriter的logger中间件。//默认情况下,gin.defaultwriter=os.stdout。Recovery// Recovery returns a middleware that recovers from any panics and writes a 500 if there was one.//recovery返回一个中间件,该中间件可以从任何崩溃中恢复,且则写入500。
New()
该函数不加载任何中间件,根据需要自己手动加载中间件。
engine.Use(MiddleWare)
自定义Http服务配置
Run方法,我们可以看到内部实际是调用了"net/http" 包的http.ListenAndServe方法。继续追踪,内部又调用了 "net/http" 包的 Server.ListenAndServe(): 
那么重点来了,这个 Server 的struct是做什么的? 通过查看源码,我发现这个 struct内部实际上设置了一些配置,比如ReadTimeout WriteTimeout MaxHeaderBytes ,这些配置还是非常有用的,那如果自己配置。demo如下:
func main() {router:= gin.Default()s:= &http.Server{Addr: ":8080",Handler: router,ReadTimeout: 10 * time.Second,WriteTimeout: 10 * time.Second,MaxHeaderBytes: 1 << 20,}s.ListenAndServe()}
