[gin] Gin 起步走(Getting Started)
- package gin @ godoc
- Gin Web Framework @ gin-gonic
特色功能
- 快速
- 支援 middleware:HTTP 請求會透過一連串的 middleware 處理,例如 Logger、驗證、GZIP 等等
- Crash-free:Gin 可以攔截 HTTP 請求過程中發生的 panic 並從中復活,如此你的伺服器將可以總是活著。
- JSON validation:Gin 可以解析和驗證傳進來的 JSON
- Routes grouping:可以以更有組織的方式整理路由
- 錯誤管理
- 內建轉譯畫面的功能
範例
建立路由並回傳 JSON
func main() {
r := gin.Default()
r.GET("/ping", func(ctx *gin.Context) {
// 回傳字串
ctx.String(200, "pong")
// 回傳 JSON
ctx.JSON(200, gin.H{
"message": "pong",
})
})
// r.Run(":3000")
r.Run() // default localhost:8000
}
可以把 routes handler 抽成 function
package main
import "github.com/gin-gonic/gin"
// 回傳的 Type 是 *gin.Engine
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() // default localhost:8000
}
直接將第三方傳來的 JSON 轉傳出去
func (p *PostUsecase) GetPost(ctx *gin.Context) {
id := ctx.Param("id")
requestURL := fmt.Sprintf("https://jsonplaceholder.typicode.com/posts/%v", id)
resp, err := http.Get(requestURL)
if err != nil {
log.Println("http.Get failed", err)
panic(err)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
ctx.Header("Content-Type", "application/json")
ctx.String(http.StatusOK, string(body))
}