Golang Gin框架有哪些优秀的入门模板和项目脚手架?
Golang Gin框架有哪些优秀的入门模板和项目脚手架? 我正在开始审查Gin Web项目的入门模板。我很想听听大家对哪些模板比较青睐。
我通常希望找到一个配置了热重载的模板,并且包含日志记录、错误处理、身份验证、CORS、速率限制、配置/环境变量处理、集成测试、部署测试和负载测试的示例。
更新:我将尝试使用一些大型的Go项目(忽略其使用的具体路由库)来开始构建我对人们如何组织后端项目的理解。我打算从Gitea和CockroachDB开始。
1 回复
更多关于Golang Gin框架有哪些优秀的入门模板和项目脚手架?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
对于Gin框架的入门模板和项目脚手架,以下是一些值得推荐的选择:
1. gin-gonic/gin 官方示例
官方仓库提供了完整的示例代码,包含基本的路由、中间件等:
// 官方示例结构
github.com/gin-gonic/examples
2. go-gin-template 综合模板
这是一个配置齐全的生产级模板:
# 克隆模板
git clone https://github.com/eddycjy/go-gin-template
主要特性:
- 热重载(使用air)
- 结构化日志(zap)
- JWT身份验证
- CORS中间件
- 速率限制
- Viper配置管理
- 数据库集成(GORM)
3. gin-boilerplate 企业级脚手架
// 项目结构示例
├── cmd/
│ └── server/
│ └── main.go
├── internal/
│ ├── config/
│ ├── handler/
│ ├── middleware/
│ ├── model/
│ └── service/
├── pkg/
├── api/
├── test/
└── deploy/
4. gin-vue-admin 全栈模板
如果你需要前后端分离的完整解决方案:
git clone https://github.com/flipped-aurora/gin-vue-admin
5. gin-realworld-example-app
遵循RealWorld规范的完整示例:
// 包含完整的API实现
github.com/gothinkster/golang-gin-realworld-example-app
热重载配置示例(使用Air):
# .air.toml
root = "."
testdata_dir = "testdata"
tmp_dir = "tmp"
[build]
cmd = "go build -o ./tmp/main ."
bin = "tmp/main"
full_bin = "APP_ENV=dev APP_USER=air ./tmp/main"
include_ext = ["go", "tpl", "tmpl", "html"]
exclude_dir = ["assets", "tmp", "vendor", "testdata"]
include_dir = []
exclude_regex = ["_test.go"]
exclude_unchanged = true
follow_symlink = false
log = "build-errors.log"
delay = 1000
stop_on_error = true
send_interrupt = false
kill_delay = 500
[log]
time = false
[color]
main = "magenta"
watcher = "cyan"
build = "yellow"
runner = "green"
大型项目参考结构:
从Gitea和CockroachDB学习到的组织模式:
// Gitea风格的项目结构
internal/
├── api/ # HTTP handlers
├── auth/ # 认证逻辑
├── cmd/ # 命令行入口
├── conf/ # 配置
├── db/ # 数据库层
├── models/ # 数据模型
├── routers/ # 路由定义
├── services/ # 业务逻辑
└── utils/ # 工具函数
// CockroachDB风格的错误处理
func (h *Handler) GetUser(c *gin.Context) {
userID := c.Param("id")
user, err := h.service.GetUser(userID)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{
"error": "Failed to get user",
"code": "INTERNAL_ERROR",
})
return
}
c.JSON(http.StatusOK, user)
}
推荐的中间件组合:
func setupRouter() *gin.Engine {
r := gin.New()
// 基础中间件
r.Use(gin.Logger())
r.Use(gin.Recovery())
// CORS
r.Use(cors.New(cors.Config{
AllowOrigins: []string{"https://example.com"},
AllowMethods: []string{"GET", "POST", "PUT", "DELETE"},
AllowHeaders: []string{"Origin", "Authorization"},
ExposeHeaders: []string{"Content-Length"},
AllowCredentials: true,
MaxAge: 12 * time.Hour,
}))
// 速率限制
store := memory.NewStore()
rateLimiter := limiter.New(store, limiter.Rate{
Period: 1 * time.Minute,
Limit: 60,
})
r.Use(limiter.NewMiddleware(rateLimiter))
return r
}
这些模板和项目结构都提供了完整的生产就绪配置,可以直接用于实际项目开发。

