跳至主要内容

[gin] Gin 起步走(Getting Started)

特色功能

  • 快速
  • 支援 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))
}