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, 如果资源不存在则创建,否则更新

posted @ 2020-02-05 11:56  jihite  阅读(2718)  评论(0编辑  收藏  举报