Skip to main content

[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.Enginefunc 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))}