Gin 基本操作
1. 安装
go get -u github.com/gin-gonic/gin
2. Hello World
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run() // listen and serve on
}
3. 路由
3.1 概念
路由是一个由一个 URI(或者叫路径)和一个特定的 HTTP 方法(GET、POST 等)组成的,涉及到应用如何响应客户端对某个网站节点的访问。
3.2 基本路由
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
// 基本路由
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run() // listen and serve on
}
3.3 路由参数
- 参数作为路径的一部分
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
// 路由参数
r.GET("/user/:name", func(c *gin.Context) {
name := c.Param("name")
c.String(200, "Hello %s", name)
})
r.Run() // listen and serve on
}
- 参数作为查询字符串
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
// 路由参数
r.GET("/user", func(c *gin.Context) {
name := c.Query("name")
c.String(200, "Hello %s", name)
})
r.Run() // listen and serve on
}
3.4 路由组
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
// 路由组
v1 := r.Group("/v1")
{
v1.GET("/login", func(c *gin.Context) {
c.String(200, "v1 login")
})
v1.GET("/submit", func(c *gin.Context) {
c.String(200, "v1 submit")
})
}
v2 := r.Group("/v2")
{
v2.GET("/login", func(c *gin.Context) {
c.String(200, "v2 login")
})
v2.GET("/submit", func(c *gin.Context) {
c.String(200, "v2 submit")
})
}
r.Run() // listen and serve on
}
3.5 路由重定向
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
// 路由重定向
r.GET("/a", func(c *gin.Context) {
c.Redirect(301, "/b")
})
r.GET("/b", func(c *gin.Context) {
c.String(200, "b")
})
r.Run() // listen and serve on
}
3.6 路由重定向
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
// 路由重定向
r.GET("/a", func(c *gin.Context) {
c.Redirect(301, "/b")
})
r.GET("/b", func(c *gin.Context) {
c.String(200, "b")
})
r.Run() // listen and serve on
}
Gin 中间件
1. 概念
中间件(Middleware)是一种设计模式,它提供了一种方便的机制,用于过滤进入应用程序的 HTTP 请求,并在需要时进行修改。Gin 中间件的实质是一种基于高阶函数的设计模式,它接受一个 HandlerFunc 作为参数,并返回一个新的 HandlerFunc。
2. 基本使用
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
// 中间件
r.Use(func(c *gin.Context) {
c.String(200, "hello world")
})
r.Run() // listen and serve on
}
3. 中间件分类
3.1 全局中间件
全局中间件将会作用于每一个请求上,它们是按照它们添加的顺序执行的。
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
// 全局中间件
r.Use(func(c *gin.Context) {
c.String(200, "hello world")
})
r.Run() // listen and serve on
}
3.2 路由中间件
路由中间件将会作用于一个或者多个路由之上,它们是按照它们添加的顺序执行的。
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
// 路由中间件
r.GET("/a", func(c *gin.Context) {
c.String(200, "a")
}, func(c *gin.Context) {
c.String(200, "b")
})
r.Run() // listen and serve on
}
3.3 错误中间件
错误中间件是一种专门用来处理错误的中间件,它会在所有中间件之后执行,因此,它应该是所有中间件中最后一个被添加的。
3.4 组中间件
组中间件是附加到路由组的中间件,它们将会作用于该路由组中的所有请求。
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
// 组中间件
r.Use(func(c *gin.Context) {
c.String(200, "hello world")
})
v1 := r.Group("/v1")
{
v1.GET("/login", func(c *gin.Context) {
c.String(200, "v1 login")
})
v1.GET("/submit", func(c *gin.Context) {
c.String(200, "v1 submit")
})
}
v2 := r.Group("/v2")
{
v2.GET("/login", func(c *gin.Context) {
c.String(200, "v2 login")
})
v2.GET("/submit", func(c *gin.Context) {
c.String(200, "v2 submit")
})
}
r.Run() // listen and serve on
}