Gin 是一个用 Go(Golang)编写的高性能 Web 框架,以其简洁的 API 和出色的性能著称。下面是一个 Gin 框架的基础使用指南,包括安装、路由、中间件、参数处理、返回 JSON 等常用功能。
一、安装 Gin
确保你已安装 Go(推荐 1.19+),然后执行:
go mod init your_project_name
go get -u github.com/gin-gonic/gin
二、Hello World 示例
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/hello", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "Hello, Gin!",
})
})
r.GET("/user/:id", func(c *gin.Context) {
id := c.Param("id")
c.JSON(200, gin.H{"id": id})
})
r.Run(":8080") // 默认监听 localhost:8080
}
运行后访问 http://localhost:8080/hello,会返回 JSON:
{"message":"Hello, Gin!"}
三、路由(Routing)
1. 基本 HTTP 方法
r.GET("/get", getHandler)
r.POST("/post", postHandler)
r.PUT("/put", putHandler)
r.DELETE("/delete", deleteHandler)
2. 路径参数(Path Parameters)
r.GET("/user/:id", func(c *gin.Context) {
id := c.Param("id")
c.JSON(200, gin.H{"id": id})
})
访问 /user/123 → 返回 {“id”: “123”}
3. 查询参数(Query Parameters)
r.GET("/search", func(c *gin.Context) {
keyword := c.Query("q") // ?q=go
page := c.DefaultQuery("page", "1") // 默认值为 "1"
c.JSON(200, gin.H{
"query": keyword,
"page": page,
})
})
四、接收请求体(POST/PUT)
接收 JSON
type User struct {
Name string `json:"name"`
Email string `json:"email"`
}
r.POST("/user", func(c *gin.Context) {
var user User
if err := c.ShouldBindJSON(&user); err != nil {
c.JSON(400, gin.H{"error": err.Error()})
return
}
c.JSON(200, gin.H{
"status": "success",
"data": user,
})
})
发送 POST 请求示例(Content-Type: application/json):
{
"name": "Alice",
"email": "alice@example.com"
}
五、中间件(Middleware)
自定义中间件
func Logger() gin.HandlerFunc {
return func(c *gin.Context) {
t := time.Now()
c.Next() // 执行后续处理器
latency := time.Since(t)
log.Printf("Path: %s, Latency: %v", c.Request.URL.Path, latency)
}
}// 使用中间件r.Use(Logger())
// 使用中间件
r.Use(Logger())
使用内置中间件
r.Use(gin.Logger()) // 日志
r.Use(gin.Recovery()) // 崩溃恢复
六、静态文件与 HTML 渲染
静态文件
r.Static("/assets", "./static") // 访问 /assets/logo.png 对应 ./static/logo.png
渲染 HTML
r.LoadHTMLGlob("templates/*")
r.GET("/index", func(c *gin.Context) {
c.HTML(200, "index.html", gin.H{
"title": "Gin Web App",
})
})
templates/index.html 示例:
<h1>{{ .title }}</h1>
七、分组路由(Grouping Routes)
api := r.Group("/api/v1")
{
api.GET("/users", getUsers)
api.POST("/users", createUser)
api.PUT("/users/:id", updateUser)
}
八、错误处理与自定义响应
c.AbortWithStatusJSON(400, gin.H{"error": "Invalid input"})
九、常用技巧
- 绑定表单:c.ShouldBind(&form)
- 设置 Cookie:c.SetCookie(…)
- 获取 Header:c.GetHeader(“User-Agent”
- 重定向:c.Redirect(302, “/new-path”)
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...