golang Gin介绍

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”)
© 版权声明

相关文章

暂无评论

none
暂无评论...