ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Golang go-gin路由

2020-02-05 12:08:09  阅读:243  来源: 互联网

标签:Context tags Golang api apig go gin POST


代码实现

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

标签:Context,tags,Golang,api,apig,go,gin,POST
来源: https://www.cnblogs.com/kaituorensheng/p/12263068.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有