路由及路由分组

初始化 gin 引擎后获得 gin 引擎对象,通过引擎对象的 GET、POST、PUT、DELETE、Any 方法来定义路由。

package main

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

func main() {
	// 初始化 Gin 引擎
	gin.SetMode(gin.ReleaseMode)
	r := gin.New()
	// 定义首页路由
	r.GET("/", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "hello",
		})
	})
	// 定义关于其他路由
	r.GET("/News", func(ctx *gin.Context) {
		ctx.Writer.Write([]byte("新闻"))
	})
	// 启动 web 服务
	r.Run(":80")
}

关于 Any

Any 代表路由可以接受 GET、POST、PUT、DELETE 任何模式,可以使用 ctx.Request.Method 获取请求类型 :

package main

import (
	"fmt"

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

func main() {
	// 初始化 Gin 引擎
	gin.SetMode(gin.ReleaseMode)
	r := gin.New()
	// 定义首页路由
	r.GET("/", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "hello",
		})
	})
	// 定义关于其他路由
	r.Any("/Any", func(ctx *gin.Context) {
		requestMethod := ctx.Request.Method
		fmt.Printf("requestMethod: %v\n", requestMethod)
	})
	// 启动 web 服务
	r.Run(":80")
}

路由分组

可以通过 r.Group() 函数来实现路由分组,例如将路由划分为网站前端和后端 :

package main

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

func main() {
	// 初始化 Gin 引擎
	r := gin.Default()

	// 网站前台分组
	frontGroup := r.Group("/")
	frontGroup.GET("/", func(ctx *gin.Context) {
		ctx.Writer.Write([]byte("首页"))
	})

	// 网站后台分组
	AdminGroup := r.Group("/Admin")
	AdminGroup.GET("/", func(ctx *gin.Context) {
		ctx.Writer.Write([]byte("后台首页"))
	})

	r.Run(":80")
}

访问 localhost 匹配网站前端路由;

访问 localhost/Admin 匹配网站后台路由;

路由文件抽离

可以将路由抽离为一个或者多个文件,使您的项目结构更加合理,下面我们样式将上面的路由抽离为前端、后端2个路由文件:

1. 创建文件 /router 文件夹

2. 创建 /router/front.go 文件,编写如下代码 :

package router

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

// 网站前台分组
func Front(r *gin.Engine) {
	frontGroup := r.Group("/")
	frontGroup.GET("/", func(ctx *gin.Context) {
		ctx.Writer.Write([]byte("首页"))
	})
}

3. 创建 /router/admin.go 文件,编写如下代码 :

package router

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

// 网站前台分组
func Admin(r *gin.Engine) {
	// 网站后台分组
	AdminGroup := r.Group("/Admin")
	AdminGroup.GET("/", func(ctx *gin.Context) {
		ctx.Writer.Write([]byte("后台首页"))
	})
}

4. 在 main.go 中应用路由

import (
	"gotest/router"

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

func main() {
	// 初始化 Gin 引擎
	r := gin.Default()
	router.Front(r)
	router.Admin(r)
	r.Run(":80")
}

5. 运行,体验效果,至此路由文件抽离完毕。