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 文件中,代码如下:
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 文件中,代码如下:
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")
}


import ("gin-quickstart/routers")
import (
"gin-quickstart/routers"
"github.com/gin-gonic/gin"
)
注意点:这里引入的是路径不是包名。
一个容易踩的点:包名不等于文件夹名(但通常相等)
Go 规范里,
代码中使用的名字只看package xxx 声明,不看文件夹名 。
假设你把 user.go 改成package user ,那么 main.go 就必须写成:
import "gin-quickstart/routers" // 路径不变,因为import引入的是路径不是包名
user.UserRouters(r) // 但这里要用 user,不是 routers
routers.UserRouters(r)是包名点上.包名中对应的方法
routers.UserRouters(r) 就是 包名.函数名(参数) 的调用形式。
routers . UserRouters ( r )
│ │ └─ 实参:把 gin 引擎 r 传进去
│ └─ 函数名(必须大写开头才能被别的包调用,叫"导出")
└─ 包名
只有大写开头才能跨包调用
user.go 里的func UserRouters 首字母大写,是"导出函数",外部包才能访问。
如果写成userRouters (小写),main.go 里就调不到了
这是 Go 的可见性规则: 大写 = 公开,小写 = 私有 。
出处:https://www.cnblogs.com/ishoulgodo/
想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,或者关注博主,在此感谢!
万水千山总是情,打赏5毛买辣条行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主(っ•̀ω•́)っ✎⁾⁾!
想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!
如果文中有什么错误,欢迎指出。以免更多的人被误导。

浙公网安备 33010602011771号