目 录CONTENT

文章目录

Go学习:在Gin的路由注册API

Administrator
2025-12-22 / 0 评论 / 0 点赞 / 109 阅读 / 0 字

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

0
Gin
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区