go语言抽离路由文件以及对路由进行分组

对路由进行分组

go 复制代码
package main

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

func main() {
	// 创建一个默认的路由引擎
	r := gin.Default()
	// 允许跨域中间件(注意:必须写在路由注册【之前】才对已注册路由生效)
	r.Use(func(c *gin.Context) {
		c.Header("Access-Control-Allow-Origin", "*") // 允许所有来源(学习阶段够用)
		c.Header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")
		c.Header("Access-Control-Allow-Headers", "Content-Type")
		// 浏览器发复杂请求前会先发 OPTIONS 预检,直接放行
		if c.Request.Method == "OPTIONS" {
			c.AbortWithStatus(204)
			return
		}
		c.Next()
	})

	// 对路由进行分组
	apiUserRouters := r.Group("/user")
	{
		// 浏览器访问的是: http://localhost:8087/user/list 接口应该是:127.0.0.1:8087/user/list
		apiUserRouters.GET("/list", func(c *gin.Context) {
			c.JSON(200, gin.H{
				"msg": "获取用户列表成功",
			})
		})
		// 浏览器访问的是: http://localhost:8087/user/detail 接口应该是:127.0.0.1:8087/user/detail
		apiUserRouters.GET("/detail", func(c *gin.Context) {
			c.JSON(200, gin.H{
				"msg": "获取用户详情成功",
			})
		})
	}

	// 启动服务,端口为8080,当然你也可以更改的哈
	r.Run(":8087")
}

在浏览器中访问:http://localhost:8087/user/list

应该会返回:{"msg":"获取用户列表成功"}

在浏览器中访问:<http://localhost:8087/user/detail

应该会返回:{"msg":"获取用户详情成功"}

对路由文件进行抽离后分组

如果我们所有的代码都写在main.go文件中

那么就会导致main.go文件中的代码量增加,导致代码难以维护。

在main.go的同级,创建一个文件夹,命名为 routers。

在 routers 文件夹中,创建一个文件,命名为 user.go。

user.go 文件中,代码如下:

go 复制代码
package routers
import "github.com/gin-gonic/gin"
// 注意首字母要大写的哈
func UserRouters(r *gin.Engine) {
	apiUserRouters := r.Group("/user")
	{
		// 浏览器访问的是: http://localhost:8087/user/list 接口应该是:127.0.0.1:8087/user/list
		apiUserRouters.GET("/list", func(c *gin.Context) {
			c.JSON(200, gin.H{
				"msg": "获取用户列表成功",
			})
		})
		// 浏览器访问的是: http://localhost:8087/user/detail 接口应该是:127.0.0.1:8087/user/detail
		apiUserRouters.GET("/detail", func(c *gin.Context) {
			c.JSON(200, gin.H{
				"msg": "获取用户详情成功",
			})
		})
	}
}

main.go 文件中,代码如下:

go 复制代码
package main

import (
	"gin-quickstart/routers"

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

// "gin-quickstart/routers" 表示引入 routers 包(也就是引入我们创建的路由文件夹),用于注册路由

func main() {
	// 创建一个默认的路由引擎
	r := gin.Default()
	// 允许跨域中间件(注意:必须写在路由注册【之前】才对已注册路由生效)
	r.Use(func(c *gin.Context) {
		c.Header("Access-Control-Allow-Origin", "*") // 允许所有来源(学习阶段够用)
		c.Header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")
		c.Header("Access-Control-Allow-Headers", "Content-Type")
		// 浏览器发复杂请求前会先发 OPTIONS 预检,直接放行
		if c.Request.Method == "OPTIONS" {
			c.AbortWithStatus(204)
			return
		}
		c.Next()
	})

	// 注册用户路由,routers表示的是路由包,
	// UserRouters表示的是路由函数(也就是这个包中user.go文件中的函数)
	routers.UserRouters(r)

	// 启动服务,端口为8080,当然你也可以更改的哈
	r.Run(":8087")
}

相关推荐
zz在掘金337081 小时前
Django __init__.py 高级应用速记
后端
软件工程师文艺6661 小时前
Teamcenter FMS 文件管理系统深度解析:缓存策略、SSL 部署与性能调优
后端
Gopher_HBo1 小时前
类型系统 —— Type、rtype 与运行时类型元数据
后端
今天早睡1 小时前
并发分支、同步汇总与 State 合并
后端·架构
王川7081 小时前
商协会后台前端的模块聚合实践
前端·后端
旋律4141 小时前
String、StringBuilder、StringBuffer:三个"字符串",到底区别在哪?
java·后端
小卿噢1 小时前
94% 的集群在空等——数据倾斜实测
后端
没事写点啥1 小时前
WeKnora 问答实现
后端·agent·ai编程
五百万啊啊啊啊1 小时前
RSA+AES 混合加密的三个坑
后端