前言
Gin是Go语言最流行的Web框架,以高性能和简洁著称。本文介绍如何用Gin构建生产级RESTful API。
一、项目初始化
# 创建项目
mkdir myapi && cd myapi
go mod init myapi
go get -u github.com/gin-gonic/gin
go get -u gorm.io/gorm gorm.io/driver/postgres
go get -u github.com/golang-jwt/jwt/v5
二、项目结构
myapi/
├── main.go
├── config/
│ └── database.go
├── models/
│ └── user.go
├── handlers/
│ └── user_handler.go
├── middleware/
│ └── auth.go
├── routes/
│ └── routes.go
└── go.mod
三、数据库模型
// models/user.go
package models
import "gorm.io/gorm"
type User struct {
gorm.Model
Username string `gorm:"uniqueIndex;size:50" json:"username"`
Email string `gorm:"uniqueIndex;size:100" json:"email"`
Password string `json:"-"`
Role string `gorm:"default:user" json:"role"`
}
四、路由和中间件
// routes/routes.go
func SetupRouter() *gin.Engine {
r := gin.Default()
// CORS中间件
r.Use(corsMiddleware())
// 健康检查
r.GET("/health", func(c *gin.Context) {
c.JSON(200, gin.H{"status": "ok"})
})
// API路由组
api := r.Group("/api")
{
api.POST("/register", handlers.Register)
api.POST("/login", handlers.Login)
// 需要认证的路由
auth := api.Group("/")
auth.Use(middleware.AuthMiddleware())
{
auth.GET("/users", handlers.GetUsers)
auth.POST("/users", handlers.CreateUser)
auth.PUT("/users/:id", handlers.UpdateUser)
auth.DELETE("/users/:id", handlers.DeleteUser)
}
}
return r
}
五、JWT认证
// middleware/auth.go
func AuthMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
tokenString := c.GetHeader("Authorization")
if tokenString == "" {
c.JSON(401, gin.H{"error": "未提供认证令牌"})
c.Abort()
return
}
token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
return []byte("your-secret-key"), nil
})
if err != nil || !token.Valid {
c.JSON(401, gin.H{"error": "无效的认证令牌"})
c.Abort()
return
}
claims := token.Claims.(jwt.MapClaims)
c.Set("user_id", uint(claims["user_id"].(float64)))
c.Next()
}
}
六、Swagger文档
# 安装swag
go install github.com/swaggo/swag/cmd/swag@latest
# 生成文档
swag init
# 在main.go中添加
// @title My API
// @version 1.0
// @host localhost:8080
// @BasePath /api
总结
Gin框架高性能、简洁,适合构建RESTful API。搭配GORM操作数据库,JWT处理认证,Swagger生成文档,可以快速搭建生产级API服务。
如果需要Go后端开发服务,欢迎联系17老师。
关于17老师:AI应用 · 数字化管理 · 全栈开发 · 网络安全全栈专家。联系邮箱:j.d88888888@qq.com,微信:AFIST17