关于它
- gin 是Go语言写的一个web框架,可提供 http RestFul API 服务。
- 性能超强,运行速度号称较httprouter要快40倍。封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点。
- 英文文档;中文文档。
hello word
go get -u github.com/gin-gonic/gin
package main
import "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()
}