Golang go-gin 注冊路由


代碼實現

main.go

package main

import (
    "fmt"
    "github.com/jihite/go-gin-example/pkg/setting"
    "github.com/jihite/go-gin-example/routers"
    "net/http"
)

func main() {
    router := routers.InitRouter()

    s := &http.Server{
        Addr:           fmt.Sprintf(":%d", setting.HTTPPort),
        Handler:        router,
        ReadTimeout:    setting.ReadTimeout,
        WriteTimeout:   setting.WriteTimeout,
        MaxHeaderBytes: 1 << 20,
    }
    s.ListenAndServe()
}

http:Server:

  • Addr:監聽的TCP地址,格式為:8000
  • Handler:http句柄,實質為ServeHTTP,用於處理程序響應HTTP請求
  • ReadTimeout:允許讀取的最大時間
  • WriteTimeout:允許寫入的最大時間
  • MaxHeaderBytes:請求頭的最大字節數

實現InitRouter()

func InitRouter() *gin.Engine {
    r := gin.New()
    r.Use(gin.Logger())
    r.Use(gin.Recovery())
    gin.SetMode(setting.RunMode)
    r.GET("/ping", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "pong",
        })
    })

    apig := r.Group("/api")
    {
        apig.GET("/tags", api.GetTags)
        apig.POST("/tags", api.AddTag)
        apig.PUT("/tags/:id", api.EditTag)
        apig.DELETE("/tags/:id", api.DeleteTag)
        apig.POST("/tags/export", api.ExportTag)
        apig.POST("/tags/import", api.ImportTag)

    }
    return r
}

/ping 對應的是匿名函數

/tags對應的是具體的函數

func GetTags(c *gin.Context) {

}

func AddTag(c *gin.Context) {

}

其中

gin.ContextContextgin中的上下文,它允許我們在中間件之間傳遞變量、管理流、驗證JSON請求、響應JSON請求等,在gin中包含大量Context的方法,如我們常用的DefaultQueryQueryDefaultPostFormPostForm

RESTFUL中的方法:GET、POST、PUT、DELETE、OPTIONS

方法 安全 冪等 作用
GET ✔️ ✔️ 獲取資源
POST × × 創建子資源
PUT ✔️ ✔️ 創建、更新資源
DELETE × ✔️ 刪除資源
OPTIONS ✔️ ✔️ 驗證服務是否正產

 

冪等:使用相同參數重復執行,並能獲得相同結果的函數

POST、PUT區別

POST新建子資源;而PUT, 如果資源不存在則創建,否則更新


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM