Go学习:在Gin的路由注册API
在Gin框架里路由注册可以分为3种,基本注册和路由分组。路由注册器是 gin.Engine 实例(通常命名为 router),它提供了各种 HTTP 方法对应的注册函数。
路由注册
package router
import (
"gin-demo/middleware"
"github.com/gin-gonic/gin"
)
// 初始化路由
func InitRouter() *gin.Engine {
router := gin.Default()
return router
}
基本路由注册
// 添加基本路由
router.GET("/", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "Gin应用运行成功!",
"status": "running",
"port": 8992,
})
})
router.GET("/api/health", func(c *gin.Context) {
c.JSON(200, gin.H{
"status": "ok",
"message": "服务健康",
})
})
分组路由注册
路由分组演示以作为示例展开
/ 创建v1版本的API路由分组
groupV1 := router.Group("/api/v1/gin/router_demo")
// ========================================
// 注册路由演示处理器
// ========================================
// 创建路由演示处理器实例并注册所有演示路由
// 这些路由展示了Gin框架的多种HTTP方法和功能
demoHandler := NewDemoHandler()
demoHandler.RegisterRoutes(groupV1)
在代码文件router里定义NewDemoHandler,NewDemoHandler构造函数的作用和实现:它是router_demo.go文件中的构造函数,用于创建DemoHandler实例,返回指向DemoHandler的指针。在init_router.go中被调用来实例化路由处理器,然后调用RegisterRoutes方法注册所有路由。设计遵循Go语言的构造函数惯例,将路由逻辑封装在专门的处理器结构体中。
package router
import (
"net/http"
"strconv"
"time"
"github.com/gin-gonic/gin"
)
// UserInfo 用户信息结构体,用于演示路由数据返回
type UserInfo struct {
ID uint `json:"id"`
Username string `json:"username"`
Email string `json:"email"`
Age int `json:"age"`
CreateAt string `json:"create_at"`
}
// DemoHandler 路由演示处理器结构体
type DemoHandler struct {
// 可以在这里添加需要的依赖,如数据库连接、服务等
}
// NewDemoHandler 创建路由演示处理器实例
func NewDemoHandler() *DemoHandler {
return &DemoHandler{}
}
// RegisterRoutes 注册所有演示路由到给定的路由组
// @param group *gin.RouterGroup - Gin路由组实例
func (h *DemoHandler) RegisterRoutes(group *gin.RouterGroup) {
// 路由分组说明:
// - /api/v1/gin/router_demo/users - 用户相关路由 (GET, POST, PUT, PATCH, DELETE)
// - /api/v1/gin/router_demo/login - 用户登录 (POST)
// - /api/v1/gin/router_demo/status - 系统状态查询 (GET)
// - /api/v1/gin/router_demo/upload - 文件上传 (POST)
// - /api/v1/gin/router_demo/stats - 统计信息 (GET)
// - /api/v1/gin/router_demo/search - 用户搜索 (GET)
// - /api/v1/gin/router_demo/verify-permission - 权限验证 (POST)
//
// 支持的HTTP方法:
// GET: 获取数据 (查询用户列表、单个用户、系统状态等)
// POST: 创建数据 (创建用户、登录、文件上传等)
// PUT: 完整更新 (更新用户全部信息)
// PATCH: 部分更新 (更新用户部分信息)
// DELETE: 删除数据 (删除用户、批量删除)
// ========================================
// 基础路由示例 - GET请求
// ========================================
// 获取用户列表
// 访问路径: GET /api/v1/gin/router_demo/users
// 描述: 获取所有用户的列表信息
group.GET("/users", h.GetUsers)
// 获取单个用户信息
// 访问路径: GET /api/v1/gin/router_demo/users/:id
// 描述: 根据用户ID获取特定用户信息
// 参数: id (路径参数) - 用户ID
group.GET("/users/:id", h.GetUserByID)
// 获取系统状态
// 访问路径: GET /api/v1/gin/router_demo/status
// 描述: 获取系统当前运行状态信息
group.GET("/status", h.GetSystemStatus)
// ========================================
// 数据创建路由 - POST请求
// ========================================
// 创建新用户
// 访问路径: POST /api/v1/gin/router_demo/users
// 描述: 创建新的用户记录
// 请求体: JSON格式的用户信息
group.POST("/users", h.CreateUser)
// 用户登录
// 访问路径: POST /api/v1/gin/router_demo/login
// 描述: 处理用户登录请求
// 请求体: 包含用户名和密码的JSON
group.POST("/login", h.UserLogin)
// ========================================
// 数据更新路由 - PUT/PATCH请求
// ========================================
// 完整更新用户信息
// 访问路径: PUT /api/v1/gin/router_demo/users/:id
// 描述: 完整更新指定用户的所有信息
// 参数: id (路径参数) - 用户ID
// 请求体: JSON格式的完整用户信息
group.PUT("/users/:id", h.UpdateUser)
// 部分更新用户信息
// 访问路径: PATCH /api/v1/gin/router_demo/users/:id
// 描述: 部分更新指定用户的信息
// 参数: id (路径参数) - 用户ID
// 请求体: JSON格式的需更新字段
group.PATCH("/users/:id", h.PartialUpdateUser)
// ========================================
// 数据删除路由 - DELETE请求
// ========================================
// 删除用户
// 访问路径: DELETE /api/v1/gin/router_demo/users/:id
// 描述: 删除指定的用户记录
// 参数: id (路径参数) - 用户ID
group.DELETE("/users/:id", h.DeleteUser)
// 批量删除用户
// 访问路径: DELETE /api/v1/gin/router_demo/users/batch
// 描述: 批量删除多个用户
// 请求体: JSON格式的用户ID数组
group.DELETE("/users/batch", h.BatchDeleteUsers)
// ========================================
// 文件上传路由
// ========================================
// 单文件上传
// 访问路径: POST /api/v1/gin/router_demo/upload
// 描述: 上传单个文件
// 表单字段: file - 上传的文件
group.POST("/upload", h.UploadFile)
// 多文件上传
// 访问路径: POST /api/v1/gin/router_demo/upload/multiple
// 描述: 上传多个文件
// 表单字段: files - 上传的文件数组
group.POST("/upload/multiple", h.UploadMultipleFiles)
// ========================================
// 业务逻辑路由
// ========================================
// 获取用户统计信息
// 访问路径: GET /api/v1/gin/router_demo/stats/users
// 描述: 获取用户相关的统计信息
group.GET("/stats/users", h.GetUserStats)
// 搜索用户
// 访问路径: GET /api/v1/gin/router_demo/search
// 描述: 根据关键词搜索用户
// 查询参数:
// - q (string): 搜索关键词
// - page (int): 页码,默认1
// - limit (int): 每页数量,默认10
group.GET("/search", h.SearchUsers)
// 用户权限验证
// 访问路径: POST /api/v1/gin/router_demo/verify-permission
// 描述: 验证用户是否有特定权限
// 请求体: 包含用户ID和权限名称的JSON
group.POST("/verify-permission", h.VerifyUserPermission)
}
验证路由自动注册
在上期我们介绍了air自动重载,因此在编辑完路由代码之后,程序自动重载并注册路由成功
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
- using env: export GIN_MODE=release
- using code: gin.SetMode(gin.ReleaseMode)
[GIN-debug] GET / --> gin-demo/router.InitRouter.func1 (5 handlers)
[GIN-debug] GET /api/health --> gin-demo/router.InitRouter.func2 (5 handlers)
[GIN-debug] GET /api/v1/gin/router_demo/users --> gin-demo/router.(*DemoHandler).GetUsers-fm (5 handlers)
[GIN-debug] GET /api/v1/gin/router_demo/users/:id --> gin-demo/router.(*DemoHandler).GetUserByID-fm (5 handlers)
[GIN-debug] GET /api/v1/gin/router_demo/status --> gin-demo/router.(*DemoHandler).GetSystemStatus-fm (5 handlers)
[GIN-debug] POST /api/v1/gin/router_demo/users --> gin-demo/router.(*DemoHandler).CreateUser-fm (5 handlers)
[GIN-debug] POST /api/v1/gin/router_demo/login --> gin-demo/router.(*DemoHandler).UserLogin-fm (5 handlers)
[GIN-debug] PUT /api/v1/gin/router_demo/users/:id --> gin-demo/router.(*DemoHandler).UpdateUser-fm (5 handlers)
[GIN-debug] PATCH /api/v1/gin/router_demo/users/:id --> gin-demo/router.(*DemoHandler).PartialUpdateUser-fm (5 handlers)
[GIN-debug] DELETE /api/v1/gin/router_demo/users/:id --> gin-demo/router.(*DemoHandler).DeleteUser-fm (5 handlers)
[GIN-debug] DELETE /api/v1/gin/router_demo/users/batch --> gin-demo/router.(*DemoHandler).BatchDeleteUsers-fm (5 handlers)
[GIN-debug] POST /api/v1/gin/router_demo/upload --> gin-demo/router.(*DemoHandler).UploadFile-fm (5 handlers)
[GIN-debug] POST /api/v1/gin/router_demo/upload/multiple --> gin-demo/router.(*DemoHandler).UploadMultipleFiles-fm (5 handlers)
[GIN-debug] GET /api/v1/gin/router_demo/stats/users --> gin-demo/router.(*DemoHandler).GetUserStats-fm (5 handlers)
[GIN-debug] GET /api/v1/gin/router_demo/search --> gin-demo/router.(*DemoHandler).SearchUsers-fm (5 handlers)
[GIN-debug] POST /api/v1/gin/router_demo/verify-permission --> gin-demo/router.(*DemoHandler).VerifyUserPermission-fm (5 handlers)
{"file":"main.go:15","func":"main.main","level":"info","msg":"服务启动中,监听端口: 8992","time":"2025-12-22 21:09:51"}
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
Please check https://github.com/gin-gonic/gin/blob/master/docs/doc.md#dont-trust-all-proxies for details.
[GIN-debug] Listening and serving HTTP on :8992
谢谢关注收藏
✨点击【关注】锁定宝藏库,从此升职加薪不迷路
我的博客网站:
https://funkygod.vip
我的微信公众号

📢 腾讯云限时福利
有云服务器、CDN、对象存储、网络防护等需求的朋友,欢迎联系下方腾讯云官方销售 👇
轻量云主机限时优惠
RackNerd
☁ 主机显示特惠:只要80元(3TB流量,1vcpu,50GB硬盘),且多区域IDC机房。
购买地址:https://my.racknerd.com/aff.php?aff=14942

CloudCone
CloudCone 特惠轻量云主机:购买地址:https://app.cloudcone.com/?ref=12332

评论区