Gin版本的路由总结

之前做算法,一直使用fastapi,进行算法集成数据库,知识库,以及向量数据库,最近为了减轻自己的工作量,索性更换了底层框架,该用gin,实现了单人开发,算法,前后端,每一个版本直接交付,不需要服务器部署等繁琐操作,特别适合公司算法就1个,也不需要和别人写作的情景下开发。基于此,整理了下gin的路由模块,发现和fastapi还是很相似的非常好用。

1.目录结构
2. 代码部分
2.1. main.go
复制代码
package main

import (
	"gowebui/routers"
)
func main(){
	// 设置路由
	r := routers.SetupRouter()
	// 启动服务器
	r.Run(":8080")

	
}
2.2. routers
2.2.1. router/routers.go
复制代码
// routers/routers.go
package routers

import (

	// v1 路由模块

	v1 "gowebui/routers/v1"
	"net/http"

	"github.com/gin-gonic/gin"
)

// SetupRouter 初始化路由引擎
func SetupRouter() *gin.Engine {
	// 根据配置设置 Gin 运行模式
	

	// 创建默认的 Gin 引擎
	r := gin.Default()

	// 设置静态资源路由:/static/* -> ./web/static/
	// r.Static("/static", "./web/static")

	// 加载 HTML 模板:支持嵌套模板(如 layout + page)
	// r.LoadHTMLGlob("./web/templates/*")

	// 注册首页路由(如果是 Web 页面)
	// r.GET("/", controller.IndexHandler)

	// 可选:健康检查
	r.GET("/ping", func(c *gin.Context) {
		c.String(http.StatusOK, "pong")
	})

	// 挂载 API 版本路由
	// 由于 v1.SetupTodoRoutes 未定义,暂时注释掉该调用,需检查 v1 包中是否存在该函数
	v1.RegisterRoutes(r) // 推荐方式:调用 v1 包注册
	// 或直接调用 setupTodoRoutes(r)(见下方备选)

	return r
}
2.2.2. routers/v1/register.go
复制代码
// routers/v1/register.go
package v1

import "github.com/gin-gonic/gin"

// RegisterRoutes 注册 v1 版本的所有路由
func RegisterRoutes(r *gin.Engine) {
	v1 := r.Group("/v1")
	{
		setupTodoRoutes(v1)
		setupUserRoutes(v1)
		// 其他模块...
	}
}
2.2.3. routers/v1/user.go
复制代码
// routers/v1/todo.go
package v1

import (
	"gowebui/controller"

	"github.com/gin-gonic/gin"
)

func setupUserRoutes(rg *gin.RouterGroup) {
	todo := rg.Group("/todo")
	{
		// todo.POST("", controller.CreateTodo)           // POST /v1/todo
		todo.GET("", controller.GetUserList)           // GET /v1/todo
		todo.GET("/:id", controller.GetUser)           // GET /v1/todo/1
		// todo.PUT("/:id", controller.UpdateTodo)        // PUT /v1/todo/1
		// todo.DELETE("/:id", controller.DeleteTodo)     // DELETE /v1/todo/1
	}
}
2.2.4. routers/v1/todo.go
复制代码
package v1

import (
	"gowebui/controller"

	"github.com/gin-gonic/gin"
)

func setupTodoRoutes(r *gin.RouterGroup) {
	todo := r.Group("/user")
	{
		// todo.POST("", controller.CreateTodo)           // POST /v1/todo
		todo.GET("", controller.GetTodoList)           // GET /v1/todo
		todo.GET("/:id", controller.GetTodo)           // GET /v1/todo/1
		// todo.PUT("/:id", controller.UpdateTodo)        // PUT /v1/todo/1
		// todo.DELETE("/:id", controller.DeleteTodo)     // DELETE /v1/todo/1
	}
}
2.3. controller/controller.go
复制代码
package controller

import (
	"net/http"

	"github.com/gin-gonic/gin"
)


func GetUserList(c *gin.Context) {
	c.JSON(http.StatusOK, gin.H{
		"message": "GetUserList",
	})
}

func GetUser(c *gin.Context) {
	c.JSON(http.StatusOK, gin.H{
		"message": "GetUser",
	})
}




func GetTodoList(c *gin.Context) {
	c.JSON(http.StatusOK, gin.H{
		"message": "GetTodoList",
	})
}

func GetTodo(c *gin.Context) {
	c.JSON(http.StatusOK, gin.H{
		"message": "GetTodo",
	})
}
相关推荐
冬奇Lab6 分钟前
RAG 系列(二十四):代码 RAG——让 AI 理解你的代码库
人工智能·llm
社交怪人18 分钟前
【算平均分】信息学奥赛一本通C语言解法(题号2071)
c语言·开发语言
郭涤生1 小时前
不同主机之间网络通信-以太网连接复习
开发语言·rk3588
山居秋暝LS1 小时前
【无标题】RTX00安装paddle OCR,win11不能装最新的,也不能用GPU
开发语言·r语言
卢锡荣1 小时前
单芯通吃,盲插标杆 —— 乐得瑞 LDR6020,Type‑C 全场景互联 “智慧芯”
c语言·开发语言·计算机外设
Xin_ye100861 小时前
C# 零基础到精通教程 - 第七章:面向对象编程(入门)——类与对象
开发语言·c#
AI科技星2 小时前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi
审判长烧鸡2 小时前
【Go工具】go-playground是什么组织?官方的?
开发语言·安全·go
kkeeper~2 小时前
0基础C语言积跬步之字符函数与字符串函数(上)
c语言·开发语言
hhb_6183 小时前
Swift核心技术难点与实战案例解析
开发语言·ios·swift