Web 框架 Gin | Gin快速入門
作者:xcbeyond
瘋狂源自夢想,技術(shù)成就輝煌!微信公眾號:《程序猿技術(shù)大咖》號主,專注后端開發(fā)多年,擁有豐富的研發(fā)經(jīng)驗,樂于技術(shù)輸出、分享,現(xiàn)階段從事微服務(wù)架構(gòu)項目的研發(fā)工作,涉及架構(gòu)設(shè)計、技術(shù)選型、業(yè)務(wù)研發(fā)等工作。對于Java、微服務(wù)、數(shù)據(jù)庫、Docker有深入了解,并有大量的調(diào)優(yōu)經(jīng)驗。
1、Gin 概述
Gin 是一個基于 Go 語言編寫的 Web 框架,與 martini 框架類似,但擁有更好的性能,借助高性能的 httprouter,速度提升了近 40 倍。如果你追求高性能和開發(fā)效率,你會愛上 Gin 框架。
在這里插入圖片描述
1.1 功能特性
快速
基于Radox樹(一種更節(jié)省空間的 Trie 樹結(jié)構(gòu))的路由,內(nèi)存占用更小。
沒有反射。
可預測的 API 性能。
中間件支持
傳入的 HTTP 請求可以由中間件鏈和最終操作處理。例如:Logger、Authorization、GZIP 以及最終的 DB 操作。
Crash 處理
Gin 框架可以捕獲一個發(fā)生在 HTTP 請求中的 panic 并 recover 它,從而保證服務(wù)器始終可用。此外,你還可以向 Sentry 報告這個 panic!
JSON 驗證
Gin 可以解析和驗證請求的 JSON,例如檢查有個必須值是否存在。
路由分組
支持通過路由分組來更好地組織路由,例如是否需要授權(quán)、設(shè)置 API 的版本等,此外,這些分組可以無限制地嵌套而不會降低性能。
錯誤管理
Gin 框架提供了一種方便的機制來收集 HTTP 請求期間發(fā)生的所有錯誤,并且最終通過中間件將它們寫入日志文件、數(shù)據(jù)庫或者通過網(wǎng)絡(luò)發(fā)送到其它系統(tǒng)。
內(nèi)置渲染
Gin 框架提供了簡單易上手的 API, 來返回 JSON、XML 或者 HTML 格式的響應(yīng)。
可擴展
我們將會在后續(xù)示例代碼中看到 Gin 框架非常容易擴展。
1.2 應(yīng)用舉例
以下項目都是使用 Gin 框架開發(fā)的:
gorush:Go 編寫的通知推送服務(wù)器。
fnproject:容器原生,云 serverless 平臺。
photoprism:基于 Go 和 Google TensorFlow 實現(xiàn)的個人照片管理工具。
krakend:擁有中間件的超高性能 API 網(wǎng)關(guān)。
picfit:Go 編寫的圖像尺寸調(diào)整服務(wù)器。
gotify:基于 WebSocket 進行實時消息收發(fā)的簡單服務(wù)器。
cds:企業(yè)級持續(xù)交付和 DevOps 自動化開源平臺。
2、快速入門
2.1 安裝
準備 Golang 環(huán)境
安裝 Gin
go get -u github.com/gin-gonic/gin
2.2 示例
創(chuàng)建示例工程目錄 gin-demo
新建 gin.go 源文件:
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
// 初始化gin對象
g := gin.Default()
// 設(shè)置一個get請求,其URL為/hello,并實現(xiàn)簡單的響應(yīng)
g.GET("/hello", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "hello world!",
})
})
// 啟動服務(wù)
g.Run()
}
go mod 導入依賴
項目 gin-demo 目錄下,執(zhí)行 go mod init gin-demo 和 go mod tidy 命令完成依賴導入,將自動生產(chǎn) go.mod 、go.sum 文件。
xcbeyond@xcbeyonddeMacBook-Pro gin-demo % go mod init gin-demo
go: creating new go.mod: module gin
go: to add module requirements and sums:
go mod tidy
xcbeyond@xcbeyonddeMacBook-Pro gin-demo % go mod tidy
go: finding module for package github.com/gin-gonic/gin
go: found github.com/gin-gonic/gin in github.com/gin-gonic/gin v1.7.3
go: downloading github.com/stretchr/testify v1.4.0
go: downloading github.com/go-playground/assert/v2 v2.0.1
go.mod:
module gin-demo
go 1.16
require github.com/gin-gonic/gin v1.7.3
運行
gin-demo 目錄執(zhí)行命令 go run gin.go 啟動 gin Web Server:
xcbeyond@xcbeyonddeMacBook-Pro gin-demo % go run gin.go
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
- using env: export GIN_MODE=release
- using code: gin.SetMode(gin.ReleaseMode)
[GIN-debug] GET /hello --> main.main.func1 (3 handlers)
[GIN-debug] Environment variable PORT is undefined. Using port :8080 by default
[GIN-debug] Listening and serving HTTP on :8080
此時,Web Server 監(jiān)聽 8080 端口,訪問 http://localhost:8080/hello, 則會響應(yīng):
{"message":"hello world!"}
1
3、總結(jié)
Gin 的入門很簡單,簡單幾行代碼就可以啟動一個 Web Server,并且還有非常完善的組件等,接下來的文章將會對其一些細節(jié)展開具體說明。