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
}

这些模板和项目结构都提供了完整的生产就绪配置,可以直接用于实际项目开发。

回到顶部