课程地址: https://www.imooc.com/learn/1175
Vue:https://github.com/Keegan-y/vue-admin
后台代码:https://github.com/Keegan-y/gin_scaffold
gin基础知识
- 开发环境
Gin入门实战
2-5 gin基础:请求路由 - 参数作为url
func main() {
r := gin.Default()
r.GET("/:name/:id", func(c *gin.Context) {
c.JSON(200,gin.H{
"name":c.Param("name"),
"id":c.Param("id"),
})
})
r.Run()
}
2-7 gin基础:请求路由 - 泛绑定
func main() {
r := gin.Default()
r.GET("/user/*action", func(c *gin.Context) {
c.JSON(200, "hello world")
})
r.Run()
}
2-8 gin基础:获取请求参数 - 获取GET参数
func main() {
r := gin.Default()
r.GET("/test", func(c *gin.Context) {
firstName := c.Query("firstname")
lastName := c.DefaultQuery("lastname", "last_def_name")
c.String(http.StatusOK, "%s, %s", firstName, lastName)
})
r.Run()
}
2-9 gin基础:获取请求参数 - 获取body内容
func main() {
r := gin.Default()
r.POST("/test", func(c *gin.Context) {
badyByts ,err :=ioutil.ReadAll(c.Request.Body)
if err != nil {
c.String(http.StatusBadRequest, err.Error())
c.Abort() //输出结束
}
// 因为badyByts读取,需要重新写入
c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(badyByts))
firstName := c.PostForm("firstname")
lastName := c.DefaultPostForm("lastname", "last_def_name")
c.String(http.StatusOK, "%s, %s, %s", firstName, lastName, string(badyByts))
})
r.Run()
}
2-10 gin基础: 获取请求参数 - 获取bind参数
func main() {
r := gin.Default()
r.GET("/testing", testing)
r.POST("/testing", testing)
r.Run()
}
func testing(c *gin.Context) {
var person Person
if err:= c.ShouldBind(&person); err==nil{
// 这个根据
c.String(200,"%v",person)
}else {
c.String(200,"person bing error:%v",err)
}
}
2-11 gin基础:验证请求参数 - 章节介绍
结构体验证
自定义验证器
V9 可以参考:传送门
2-14 gin基础:验证请求参数 - 多语言翻译验证
2-15 gin基础:中间件-章节介绍
注意,gin.Default() 默认是加载了一些框架内置的中间件的,而 gin.New() 则没有,根据需要自己手动加载中间件。
- log中间件
package main
import (
"github.com/gin-gonic/gin"
"io"
"net/http"
"os"
)
func main() {
f, _ := os.Create("gin.log")
gin.DefaultWriter = io.MultiWriter(f)
gin.DefaultErrorWriter = io.MultiWriter(f)
r := gin.New()
r.Use(gin.Logger(), gin.Recovery()) // 请求日志, 收集错误不至于进程挂掉
r.GET("/test", func(c *gin.Context) {
lastName := c.DefaultQuery("lastname", "last_def_name")
c.String(http.StatusOK, "%s", lastName)
})
r.Run()
}
- 自定义IP白名单中间件
package main
import (
"github.com/gin-gonic/gin"
"io"
"net/http"
"os"
)
func IPAuthMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
ipList := []string{
"127.0.0.1",
}
flag := false
clientIP := c.ClientIP()
for _, host := range ipList {
if clientIP == host {
flag = true
}
}
if !flag {
c.String(401, "%s ,not in iplist", clientIP)
c.Abort()
}
}
}
func main() {
r := gin.Default()
r.Use(IPAuthMiddleware())
c.String(200, "hello ")
})
r.Run()
}
2-19 gin基础拓展:优雅关停服务器
## 2-19 gin基础拓展:template
func main() {
r := gin.Default()
r.LoadHTMLGlob("template/*")
r.GET("/test", func(c *gin.Context) {
c.HTML(200, "index.html", gin.H{
"title": "index.html",
})
})
r.Run()
}