#路由
Go一般使用Gin插件来启动服务并管理路由。 写法很简单,但是我这里更推崇按照模块去做切割(虽然 Go 最终编译时会把被引用到的代码一起打进二进制,但源码层面按模块拆分,维护起来会更清晰)。
#主程序
main.go
import "xxx/routers"
func main() {
// 注册路由
r := routers.InitRouter()
// 启动服务
r.Run()
}#路由定义
routers
| -- index.go
| -- root.go
| -- user.goindex.go
// InitRouter 路由注册清单
func InitRouter() *gin.Engine {
r := gin.Default()
// 解决跨域,配置 CORS 中间件
r.Use(cors.New(cors.Config{
// 允许的域名,如果不追求极致安全,可以先用 AllowAllOrigins: true
AllowAllOrigins: true,
AllowMethods: []string{"GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"},
AllowHeaders: []string{"Origin", "Content-Type", "Accept", "Authorization"},
ExposeHeaders: []string{"Content-Length"},
AllowCredentials: true, // 是否允许携带 Cookie
MaxAge: 12 * time.Hour,
}))
// 注册子路由
api := r.Group("/api")
{
RegisterRootRoutes(api)
RegisterUserRoutes(api)
}
return r
}root.go
func RegisterRootRoutes(router *gin.RouterGroup) {
router.GET("", func(c *gin.Context) {
htmlContent := "<div>你好, Galaxy Wisdom PO </div>"
c.Data(200, "text/html; charset=utf-8", []byte(htmlContent))
})
router.GET("/hello", func(c *gin.Context) {
c.JSON(200, gin.H{"status": "i am hello"})
})
}user.go
package routers
import (
_ "be-go/model"
"be-go/service"
"be-go/utils"
"strconv"
"github.com/gin-gonic/gin"
)
// 实例化user服务
var userService = &service.UserService{}
// GetUser 获取用户列表
// @Summary 获取用户列表
// @Description 获取用户列表,支持分页
// @Tags User
// @Param current query int false "当前页码 (默认1)"
// @Param size query int false "每页条数 (默认10)"
// @Success 200 {object} utils.JsonResult{data=model.PageResult[model.UserVO]}
// @Router /user [get]
func getUser(c *gin.Context) {
currentStr := c.Query("current")
sizeStr := c.Query("size")
current, _ := strconv.Atoi(currentStr)
size, _ := strconv.Atoi(sizeStr)
res, err := userService.GetList(current, size)
if err != nil {
utils.ResultFail(c, err.Error())
return
}
utils.ResultOk(c, res)
}
func RegisterUserRoutes(g *gin.RouterGroup) {
router := g.Group("/user")
{
router.GET("", getUser)
}
}