Gin 是 Go 中最流行的 Web 框架之一,特点是轻量、高性能、API 友好、支持中间件机制,适合 RESTful API 开发。
一、安装 Gin 框架
go get -u github.com/gin-gonic/gin
二、快速入门:Hello Gin
package main import ( "github.com/gin-gonic/gin" "net/http" ) func main() { r := gin.Default() r.GET("/ping", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"message": "pong"}) }) r.Run(":8080") // 默认监听 8080 端口 }
访问:http://localhost:8080/ping
响应:{"message":"pong"}
三、定义 RESTful 风格的用户服务
1. 用户模型定义
type User struct { ID int `json:"id"` Name string `json:"name"` } var ( users = []User{} nextID = 1 )
2. 路由注册与控制器
func main() { r := gin.Default() r.GET("/users", getUsers) r.GET("/users/:id", getUser) r.POST("/users", createUser) r.PUT("/users/:id", updateUser) r.DELETE("/users/:id", deleteUser) r.Run(":8080") }
四、具体接口实现
获取所有用户
func getUsers(c *gin.Context) { c.JSON(http.StatusOK, users) }
获取单个用户
func getUser(c *gin.Context) { id := c.Param("id") for _, u := range users { if fmt.Sprintf("%d", u.ID) == id { c.JSON(http.StatusOK, u) return } } c.JSON(http.StatusNotFound, gin.H{"error": "User not found"}) }
创建用户
func createUser(c *gin.Context) { var u User if err := c.ShouldBindJSON(&u); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } u.ID = nextID nextID++ users = append(users, u) c.JSON(http.StatusCreated, u) }
更新用户
func updateUser(c *gin.Context) { id := c.Param("id") var updated User if err := c.ShouldBindJSON(&updated); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } for i, u := range users { if fmt.Sprintf("%d", u.ID) == id { users[i].Name = updated.Name c.JSON(http.StatusOK, users[i]) return } } c.JSON(http.StatusNotFound, gin.H{"error": "User not found"}) }
删除用户
func deleteUser(c *gin.Context) { id := c.Param("id") for i, u := range users { if fmt.Sprintf("%d", u.ID) == id { users = append(users[:i], users[i+1:]...) c.Status(http.StatusNoContent) return } } c.JSON(http.StatusNotFound, gin.H{"error": "User not found"}) }
五、进阶技巧(推荐实践)
- • 参数校验:使用
binding标签自动校验 JSON 字段。 - • 中间件:日志、认证、跨域控制等。
- • 路由分组:适用于模块化项目。
- • 错误处理:标准化返回格式。
六、小结
使用 Gin 可以大幅简化 Web 开发流程,让你专注业务逻辑:
| 功能 | net/http | Gin |
| 路由注册 | 繁琐 | 简洁灵活 |
| JSON 解析 | 手动编码/解码 | 自动绑定 |
| 请求参数处理 | 需手动解析 URL/query | 一行搞定 |
| 中间件支持 | 手写封装 | 内建支持 |
七、推荐配合使用的工具和库
- • GORM:数据库操作
- • Viper:配置管理
- • Zap / Logrus:日志
- • Swagger + swaggo:接口文档自动生成