Gin是一个用Golang写的HTTP web框架。它具有类似于Martini的API,性能更高-快40倍。 如果需要很好的性能,那么肯定是推荐现在使用Gin。
基于基数树的路由,占用内存少。 没有反射。 可预测的API性能
进来的HTTP请求被中间件链处理然后最后执行。举个例子比如日志,鉴权,解压等行为拦截操作之后,将信息发送到DB
gin能捕获在HTTP请求的异常并且恢复,通过这种方式,你的服务可以保证高可用,作为一个例子,他可以提供上报异常监控
Gin能解析并且校验请求中的JSON,比如校验某些必填入值
更好路由,鉴权必要或者非必要,不同的API版本,另外,分组可以无限嵌套并且对性能不会造成影响
Gin提供了一个便利的方式去收集所有的错误发生在HTTP请求中的,最后一个中间件可以写他们到一个日志文件或者一个数据库并且通过网络发送传输。
Gin提供了一个简单实用渲染的JSON、XML和HTML的方式
创建一个新的中间件非常容易,仅仅是看看示例代码就能明白。
go的版本1.9+,未来不再支持1.7或者1.8
首先是建立在已经安装golang和设置好了你的工作目录空间。
这里需要注意的一点是所有通过go下载的GitHub内容都在$GOPATH/src/github.com目录下
go get -u github.com/gin-gonic/gin
import "github.com/gin-gonic/gin"
import "net/http"
使用一个vendor工具比如Govendor
go get github.com/kardianos/govendor
创建项目文件夹并且打开
mkdir -p $GOPATH/src/github.com/myusername/project && cd "$_"
使用vendor初始化你的项目并且添加gin框架(如果这个时候报错找不到你的govendor,则你需要先执行一个命令行设置下你的执行gopath环境目录)
export PATH=$PATH:$(go env GOPATH)/bin
govendor init
govendor fetch github.com/gin-gonic/gin@v1.3
复制一个项目模板到项目(很可能会504网关超时)
curl https://raw.githubusercontent.com/gin-gonic/examples/master/basic/main.go > main.go
运行项目
go run main.go
创建一个go 文件比如example.go
touch example.go
内容写入以下代码
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run() // listen and serve on 0.0.0.0:8080
}
然后运行代码,命令行
go run example.go
或者Goland
可以参考指标-测试结果
Gin的默认的JSON包encoding/json
如果想用其他的jsoniter,可以
go build -tags=jsoniter .
使用net/http/httptest包来测试HTTP请求
假设你的代码服务
package main
func setupRouter() *gin.Engine {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.String(200, "pong")
})
return r
}
func main() {
r := setupRouter()
r.Run(":8080")
}
测试代码命名xxx_test.go
package main
import (
"net/http"
"net/http/httptest"
"testing"
"github.com/stretchr/testify/assert"
)
func TestPingRoute(t *testing.T) {
router := setupRouter()
w := httptest.NewRecorder()
req, _ := http.NewRequest("GET", "/ping", nil)
router.ServeHTTP(w, req)
assert.Equal(t, 200, w.Code)
assert.Equal(t, "pong", w.Body.String())
}
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。