gin框架01--快速入门gin框架
gin框架01--快速入門gin框架
- 介紹
- 基礎案例
- 注意事項
- 說明
介紹
Gin 是一個用 Go (Golang) 編寫的 web 框架。 它是一個類似于 martini 但擁有更好性能的 API 框架, 由于 httprouter,速度提高了近 40 倍。 如果你是性能和高效的追求者, 你會愛上 Gin.
特性:
快速
基于 Radix 樹的路由,小內存占用。沒有反射??深A測的 API 性能。
支持中間件
傳入的 HTTP 請求可以由一系列中間件和最終操作來處理。 例如:Logger,Authorization,GZIP,最終操作 DB。
Crash 處理
Gin 可以 catch 一個發生在 HTTP 請求中的 panic 并 recover 它。這樣,你的服務器將始終可用。例如,你可以向 Sentry 報告這個 panic!
JSON 驗證
Gin 可以解析并驗證請求的 JSON,例如檢查所需值的存在。
路由組
更好地組織路由。是否需要授權,不同的 API 版本…… 此外,這些組可以無限制地嵌套而不會降低性能。
錯誤管理
Gin 提供了一種方便的方法來收集 HTTP 請求期間發生的所有錯誤。最終,中間件可以將它們寫入日志文件,數據庫并通過網絡發送。
內置渲染
Gin 為 JSON,XML 和 HTML 渲染提供了易于使用的 API。
可擴展性
新建一個中間件非常簡單,去查看示例代碼吧。
基礎案例
1 下載安裝
go get -u github.com/gin-gonic/gin2 案例1
package mainimport ("net/http""github.com/gin-gonic/gin" )var db = make(map[string]string)func setupRouter() *gin.Engine {// Disable Console Color// gin.DisableConsoleColor()r := gin.Default()// Ping testr.GET("/ping", func(c *gin.Context) {c.String(http.StatusOK, "pong")})// Get user valuer.GET("/user/:name", func(c *gin.Context) {user := c.Params.ByName("name")value, ok := db[user]if ok {c.JSON(http.StatusOK, gin.H{"user": user, "value": value})} else {c.JSON(http.StatusOK, gin.H{"user": user, "status": "no value"})}})// Authorized group (uses gin.BasicAuth() middleware)// Same than:// authorized := r.Group("/")// authorized.Use(gin.BasicAuth(gin.Credentials{// "foo": "bar",// "manu": "123",//}))authorized := r.Group("/", gin.BasicAuth(gin.Accounts{"foo": "bar", // user:foo password:bar"manu": "123", // user:manu password:123}))/* example curl for /admin with basicauth headerZm9vOmJhcg== is base64("foo:bar")curl -X POST \http://localhost:8080/admin \-H 'authorization: Basic Zm9vOmJhcg==' \-H 'content-type: application/json' \-d '{"value":"bar"}'*/authorized.POST("admin", func(c *gin.Context) {user := c.MustGet(gin.AuthUserKey).(string)// Parse JSONvar json struct {Value string `json:"value" binding:"required"`}if c.Bind(&json) == nil {db[user] = json.Valuec.JSON(http.StatusOK, gin.H{"status": "ok"})}})return r }func main() {r := setupRouter()// Listen and Server in 0.0.0.0:8080r.Run(":8080") }測試
1) http://127.0.0.1:8080/ping 輸出: pong 2)http://127.0.0.1:8080/user/admin {"status": "no value"} 3)# curl -X POST http://localhost:8080/admin -H 'authorization: Basic Zm9vOmJhcg==' -H 'content-type: application/json' -d '{"value":"bar"}' 輸出: {"status":"ok"}3 案例2
package mainimport "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() // 監聽并在 0.0.0.0:8080 上啟動服務 }測試
http://127.0.0.1:8080/ping 輸出: {"message": "pong"}注意事項
說明
gin官方文檔 gin-gonic.com/zh-cn/docs/introduction/
golang第三方類庫(json)-jsoniter
go gin 中文文檔
總結
以上是生活随笔為你收集整理的gin框架01--快速入门gin框架的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(667):运算符优先级
- 下一篇: Linux教程+操作系统教程