Gin 是 Go 中最流行的 Web 框架之一,特点是轻量、高性能、API 友好、支持中间件机制,适合 RESTful API 开发。
一、安装 Gin 框架
arduino
go get -u github.com/gin-gonic/gin
二、快速入门:Hello Gin
go
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. 用户模型定义
go
type User struct {
ID int `json:"id"`
Name string `json:"name"`
}
var (
users = []User{}
nextID = 1
)
2. 路由注册与控制器
css
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")
}
四、具体接口实现
获取所有用户
javascript
func getUsers(c *gin.Context) {
c.JSON(http.StatusOK, users)
}
获取单个用户
go
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"})
}
创建用户
go
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)
}
更新用户
go
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"})
}
删除用户
bash
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:接口文档自动生成