Go语言Web API开发:Gin框架实战

17老师 · 2026-06-02 · 阅读约13分钟

← 返回博客列表

前言

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
上一篇
Vue3状态管理
下一篇
Rust命令行开发