gin框架
文档地址:https://gin-gonic.com/zh-cn/docs
入门案例:
func main() {
r := gin.Default()
r.GET("/", func(ctx *gin.Context) {
ctx.JSON(200, gin.H{
"msg": "pong",
})
})
r.Run()
fmt.Print(r)
}
这个案例使用了GET方式。
使用gin.Default()还有gin.New(); 两者的关系,Dafault内部实际上也是调用了New,但是加上了Logger和Recovery中间件。
HTTP请求方式及Handle
gin支持GET、POST、POST、PUT、DELETE、PATCH、HEAD、OPTIONS方式。
func main() {
// 禁用控制台颜色
// gin.DisableConsoleColor()
// 使用默认中间件(logger 和 recovery 中间件)创建 gin 路由
router := gin.Default()
router.GET("/someGet", getting)
router.POST("/somePost", posting)
router.PUT("/somePut", putting)
router.DELETE("/someDelete", deleting)
router.PATCH("/somePatch", patching)
router.HEAD("/someHead", head)
router.OPTIONS("/someOptions", options)
// 默认在 8080 端口启动服务,除非定义了一个 PORT 的环境变量。
router.Run()
// router.Run(":3000") hardcode 端口号
}
请求参数处理
GET请求:
关键方法:
c.Query(“key”)
c.DefaultQuery(“key”,“xxoo”) 没有key会给一个默认值
func getKey(c *gin.Context) {
name := c.Query("name")
pass := c.DefaultQuery("pass", "zero")
c.String(200, "this is get key 获取到的key值是=%s", name)
c.String(200, "this is get key 获取到的pass key值是=%s", pass)
}
Post请求
关键方法
c.PostForm()
c.DefaultPostFrom()
func postVal(c *gin.Context) {
name := c.PostForm("name")
age := c.DefaultPostForm("age", "1")
c.String(200, "this is get key 获取到的key值是=%s %s", name, age)
}
Gin使用中间件
请求拦截
gin.default实例化引擎,默认有两个中间件Logger和Recovery分别处理日志和错误
自定义中间件
关键方法:engine.Use()
func MyHandler(c *gin.Context) {
fmt.Println("有请求来了MyHandler ")
}
func MyMidHandler() gin.HandlerFunc {
return func(ctx *gin.Context) {
path := ctx.FullPath()
method := ctx.Request.Method
fmt.Printf("path is %s and method is %s \n", path, method)
}
}
func main() {
egin := gin.Default()
egin.Use(MyHandler, MyMidHandler())
egin.GET("/", index)
egin.Run()
}
使用BasicAuth中间件路由组权限管理
// 模拟一些私人数据
var secrets = gin.H{
"foo": gin.H{"email": "foo@bar.com", "phone": "123433"},
"austin": gin.H{"email": "austin@example.com", "phone": "666"},
"lena": gin.H{"email": "lena@guapa.com", "phone": "523443"},
}
func main() {
r := gin.Default()
// 路由组使用 gin.BasicAuth() 中间件
// gin.Accounts 是 map[string]string 的一种快捷方式
authorized := r.Group("/admin", gin.BasicAuth(gin.Accounts{
"foo": "bar",
"austin": "1234",
"lena": "hello2",
"manu": "4321",
}))
// /admin/secrets 端点
// 触发 "localhost:8080/admin/secrets
authorized.GET("/secrets", func(c *gin.Context) {
// 获取用户,它是由 BasicAuth 中间件设置的
user := c.MustGet(gin.AuthUserKey).(string)
if secret, ok := secrets[user]; ok {
c.JSON(http.StatusOK, gin.H{"user": user, "secret": secret})
} else {
c.JSON(http.StatusOK, gin.H{"user": user, "secret": "NO SECRET :("})
}
})
// 监听并在 0.0.0.0:8080 上启动服务
r.Run(":8080")
}