这份文档整理 Gin 项目中最常见的写法,适合新建 API 服务或统一团队代码风格。

基础服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package main

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

func main() {
r := gin.Default()

r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})

r.Run(":8080")
}

路由分组

1
2
3
4
5
api := r.Group("/api")

api.GET("/users", listUsers)
api.POST("/users", createUser)
api.GET("/users/:id", getUser)

参数绑定

1
2
3
4
5
6
7
8
9
10
11
12
13
type CreateUserRequest struct {
Name string `json:"name" binding:"required"`
}

func createUser(c *gin.Context) {
var req CreateUserRequest
if err := c.ShouldBindJSON(&req); err != nil {
c.JSON(400, gin.H{"message": err.Error()})
return
}

c.JSON(200, gin.H{"name": req.Name})
}

路径参数:

1
id := c.Param("id")

查询参数:

1
page := c.DefaultQuery("page", "1")

中间件

1
2
3
4
5
6
7
8
9
10
11
12
func AuthMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
token := c.GetHeader("Authorization")
if token == "" {
c.JSON(401, gin.H{"message": "unauthorized"})
c.Abort()
return
}

c.Next()
}
}

统一响应

1
2
3
4
5
type Response struct {
Code int `json:"code"`
Message string `json:"message"`
Data interface{} `json:"data,omitempty"`
}

项目结构建议

1
2
3
4
5
6
7
8
9
10
11
12
cmd/
api/
main.go
internal/
handler/
middleware/
service/
repository/
model/
pkg/
response/
logger/

简单项目可以少分层,但要保持路由、业务逻辑、数据库访问职责清楚。

站内搜索

没有找到内容!