原創作者,公眾號【程式設計師讀書】,歡迎關注公眾號,轉載文章請註明出處哦。
雖然Go標準庫net/http
對使用Go開發Web應用提供非常強大的支援,然而對於想要快速開發並及上線專案的團隊來說,使用Web框架不失為一種更好的選擇。
Go社群中,有許多非常優秀的Web框架,如Gin
,Iris
,Echo
,Martini
,Revel
以及國人開發的Beego
框架。
Gin的優點
- 快速:基於
Radix
樹的路由,效能非常強大。 - 支援中介軟體:內建許多中介軟體,如
Logger
,Gzip
,Authorization
等。 - 崩潰恢復:可以捕捉panic引發的程式崩潰,使Web服務可以一直執行。
- JSON驗證:可以驗證請求中
JSON
資料格式。 - 路由分組:支援路由分組(
RouteGroup
),可以更方便組織路由。 - 錯誤管理機制:可以收集程式中的錯誤
- 多種資料渲染方式:支援
HTML
、JSON
、YAML
、XML
等資料格式的響應。 - 擴充套件性:非常簡單擴充套件中介軟體。
- 資料驗證器:支援資料驗證器且可以自定義。
安裝與使用
Gin目前最新的版本是V1.3.0
,其安裝過程非常簡單,不過在安裝Gin之前,需要安裝Go1.6
或以上的版本(後續版本可能要Go1.8
或以上),下面介紹兩種安裝方式。
直接安裝
$ go get -u github.com/gin-gonic/gin //使用-u安裝最新版本
複製程式碼
使用Govendor安裝
提示:Govendor是使用Go語言開發Go專案依賴管理工具。
- 安裝Govendor
$ go get github.com/kardianos/govendor
複製程式碼
- 安裝Gin
$ govendor init
$ govendor fetch github.com/gin-gonic/gin@v1.3
複製程式碼
簡單示例
通過上面的兩種方式安裝好Gin之後,下面通過一個簡單示例看看怎麼Gin使用開發Web應用。
import "github.com/gin-gonic/gin"
func main(){
r := gin.Default()
r.GET("/test",func(c *gin.Context){
c.JSON(200,gin.H{"hello":"world"})
})
r.Run()
}
複製程式碼
可以看到,使用gin開發一個Web服務是很簡單的一件事情,可以簡單地分解為四步:
1. 匯入gin包
在我們安裝Gin框架的時候,已經將gin包安裝到本地,如果使用go get
命令安裝的,則這個包路徑為$GOPATH/src/github.com/gin-gonic/gin
,而我們只需要使用import
命令便可以將包匯入。
import "github.com/gin-gonic/gin"
複製程式碼
2. 建立路由
使用gin.Default()方法會返回gin.Engine例項,表示預設路由引擎。
r := gin.Default()
複製程式碼
通過這種方式建立的gin.Engine,會預設使用Logger和Recovery兩個中介軟體,可以用gin.New()方法建立一個不包含任何中介軟體的預設路由。
r := gin.New()
複製程式碼
3. 定義處理HTTP的方法
通過預設路由,我們可以建立處理HTTP請求的方法,示例中使用GET方法:
r.GET("/test",func(c *gin.Context){
c.JSON(200,gin.H{"hello":"world"})
})
複製程式碼
Gin支援所有通用的HTTP請求方法:GET
,POST
,PUT
,PATCH
,OPTIONS
,HEAD
,DELETE
,其使用方式與上面例子相同,如POST:
r.POST("/test",func(c *gin.Context){
c.JSON(200,gin.H{"hello":"world"})
})
複製程式碼
每種方法都只處理對應的HTTP請求,使用Any方法則可以處理任何的HTTP請求。
r.Any("/test",func(c *gin.Context){
c.JSON(200,gin.H{"hello":"world"})
})
複製程式碼
4. 監聽埠
定義好請求之後,使用Run()方法便可監聽埠,開始接受HTTP請求,如果Run()方法沒有傳入引數的話,則預設監聽的埠是8080。
r.Run() //r.Run(":3000")
複製程式碼
小結
Gin是一個Go Web開發的輕量級框架,使用也非常地簡單,容易上手,但是,使用Gin開發前,還是需要對Go原生支援的net/http有所瞭解。
你的關注,是我寫作路上最大的鼓勵!