go语言对路由中的业务逻辑进行抽离

对业路由中的业务逻辑进行抽离

现在我们的路由和业务逻辑是在一起的;

这样会导致路由和业务逻辑耦合度高,不利于维护。

为了将路由和业务逻辑分离,我们可以将业务逻辑抽离到控制器中。

控制器是一个处理路由请求的函数,它负责接收路由参数,调用业务逻辑,返回响应。

与main.go同一级中,创建一个controllers/user/userController.go文件

userController.go代码如下

go 复制代码
package controllers
import (
	"github.com/gin-gonic/gin"
)
func UserList(c *gin.Context) {
	c.JSON(200, gin.H{
		"msg": "获取用户列表成功",
	})
}
func UserDetail(c *gin.Context) {
	c.JSON(200, gin.H{
		"msg": "获取用户详情成功",
	})
}

routers\user.go代码如下

go 复制代码
package routers

import (
	controllers "gin-quickstart/controllers/user"

	"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
		// controllers是指的是包的名称,UserList是指的是包中的函数的名称
		apiUserRouters.GET("/list", controllers.UserList)
		// 浏览器访问的是: http://localhost:8087/user/detail
		// 接口应该是:127.0.0.1:8087/user/detail
		apiUserRouters.GET("/detail", controllers.UserDetail)
	}
}

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")
}
相关推荐
leo在掘金1 小时前
纯Rust重写Photoshop,一个月7.2万Star
后端·架构
韩振方1 小时前
Kubernetes 通过资源 requests 决定 Pending Pod 能否找到节点
后端
用户360055579001 小时前
Kestrel_VLLM - 18 · 投机解码位级对拍收口:batch 与 M=1 一致,注意力路径与 CPU 逐字节对齐
后端
Thneonl1 小时前
git reset --hard 之后先别哭:reflog 里存着你刚弄丢的那个分支
运维·后端
弦儿1 小时前
后端 Web 实战:员工管理模块(多表关系 + 多表查询 + 分页查询 + 条件分页)
后端·sql
王中阳Go1 小时前
网页上答对、接口里答错:同一个知识库,差的不是模型是入口
人工智能·后端·架构
郝琳1 小时前
真实 flaky 18.3%,CI 报 0%,让 Agent 修测试,它删掉了被测的变量
后端·ai编程
子兮曰1 小时前
Bun v1.4.4 实测:2,025 个文件,bun fmt 2.6 秒跑完
前端·后端·bun
萧瑟余晖2 小时前
Spring Data JPA高级特性详解
后端·spring