一、路由

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package main

import "github.com/gin-gonic/gin"

// 定义gin绑定的ginGet方法
func ginGet(ctx *gin.Context) {
ctx.Writer.Write([]byte("Hi Get Boy"))
}

// 定义gin绑定的ginPost方法
func ginPost(ctx *gin.Context) {
ctx.Writer.Write([]byte("Hi Post Boy"))
}

func main() {
// 定义一个gin实例
engine := gin.Default()
// 定义gin的日志模式,默认是debug模式
gin.SetMode(gin.ReleaseMode)

// 不同请求和不同处理器方法绑定
engine.GET("/", ginGet)
engine.POST("/", ginPost)

// 服务监听端口号
engine.Run(":5656")
}

运行演示结果

1
2
3
4
5
6
7
# get请求路由
$ curl -XGET http://127.0.0.1:5656/
Hi Get Boy

# post请求路由
$ curl -XPOST http://127.0.0.1:5656/
Hi Post Boy

二、路由分组

在我们开发定义路由的时候,可能会遇到很多部分重复的路由:

1
2
3
/v1/users
/v1/manager
/v1/photo

以上等等,这些路由最前面的部分/admin/是相同的,如果我们一个个写也没问题,但是不免会觉得琐碎、重复,无用劳动,那么有没有一种更好的办法来解决呢?Gin为我们提供的解决方案就是分组路

类似以上示例,就是分好组的路由,分组的原因有很多,比如基于模块化,把同样模块的放在一起,比如基于版本,把相同版本的API放一起,便于使用。在有的框架中,分组路由也被称之为命名空间。

假如我们现在要升级新版本APi,但是旧的版本我们又要保留以兼容老用户。那么我们使用Gin就可以这么做

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package main

import "github.com/gin-gonic/gin"

// 定义gin绑定的ginGet方法
func ginGetv1(ctx *gin.Context) {
ctx.Writer.Write([]byte("Hi Getv1 Boy"))
}

// 定义gin绑定的ginPost方法
func ginGetv2(ctx *gin.Context) {
ctx.Writer.Write([]byte("Hi Getv2 Boy"))
}

func main() {
// 定义一个gin实例
engine := gin.Default()

//将路由分组
g1 := engine.Group("/v1")
{
g1.GET("/home", ginGetv1) // 请求路径/v1/home
g1.GET("/index", ginGetv1) // 请求路径/v1/index
}

g2 := engine.Group("/v2")
{
g2.GET("/home", ginGetv2) // 请求路径/v2/home
g2.GET("/index", ginGetv2) // 请求路径/v2/index
}

// 服务监听端口号
engine.Run(":5656")
}

运行演示结果

1
2
3
4
5
6
7
8
9
$ curl -XGET http://127.0.0.1:5656/v1/home
Hi Getv1 Boy
$ curl -XGET http://127.0.0.1:5656/v1/index
Hi Getv1 Boy

$ curl -XGET http://127.0.0.1:5656/v2/home
Hi Getv2 Boy
$ curl -XGET http://127.0.0.1:5656/v2/index
Hi Getv2 Boy