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

  • 相关阅读:
    破解 inode 校园网多网卡限制方法
    更改 eclipse的 workplace路径
    VMware Network Adapter VMnet1和VMnet8 未识别的网络的解决方法
    eclipse更改xml文件,txt文件,property文件等文件编辑器的字体设置
    Lua中数组全排序
    Lua尾调用
    C++ 调用Lua简单例子
    linux生成core dump
    vc获取系统日期
    C++培训第一天
  • 原文地址:https://www.cnblogs.com/kaituorensheng/p/12263068.html
Copyright © 2020-2023  润新知