之前做算法,一直使用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",
})
}