gin随笔01
gin简单学习
前端数据执行函数:
<body>
{{.title | safe}}
</body>
r.SetFuncMap(template.FuncMap{
"safe": func(str string) template.HTML{
return template.HTML(str)
},
})
静态文件处理
func main() {
r := gin.Default()
r.Static("/自定义名字", "./static")
//r.LoadHTMLFiles("templates/posts/index.html", "templates/users/index.html")
r.LoadHTMLGlob("templates/**/*") **表示所有文件夹,*表示所有文件
r.Run(":8080")
}
获取当前执行程序的路径
func getCurrentPath() string {
if ex, err := os.Executable(); err == nil {
return filepath.Dir(ex)
}
return "./"
}
HTTP重定向
r.GET("/test", func(c *gin.Context) {
c.Redirect(http.StatusMovedPermanently, "http://www.sogo.com/")
})
路由重定向
r.GET("/test", func(c *gin.Context) {
// 指定重定向的URL
c.Request.URL.Path = "/test2"
r.HandleContext(c)
})
r.GET("/test2", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{"hello": "world"})
})
路由组
我们可以将拥有共同URL前缀的路由划分为一个路由组。习惯性一对{}包裹同组的路由,这只是为了看着清晰,你用不用{}包裹功能上没什么区别。
func main() {
r := gin.Default()
userGroup := r.Group("/user")
{
userGroup.GET("/index", func(c *gin.Context) {...})
userGroup.GET("/login", func(c *gin.Context) {...})
userGroup.POST("/login", func(c *gin.Context) {...})
}
shopGroup := r.Group("/shop")
{
shopGroup.GET("/index", func(c *gin.Context) {...})
shopGroup.GET("/cart", func(c *gin.Context) {...})
shopGroup.POST("/checkout", func(c *gin.Context) {...})
}
r.Run()
}
Gin中间件


//两种中间件定义形式
func f1(flag bool) gin.HandlerFunc {
return func(c *gin.Context) {
if flag {
//to do
} else {
}
}
}
func f2(c *gin.Context) {
})
//注册中间件
全局中间件
r.Use(f1,f2)
// 给/test2路由单独注册中间件(可注册多个)
r.GET("/test2", f1(true), func(c *gin.Context) {
})
//为路由组注册中间件有以下两种写法
//1:
shopGroup := r.Group("/shop", f1(true))
{
shopGroup.GET("/index", func(c *gin.Context) {...})
...
}
//2:
shopGroup := r.Group("/shop")
shopGroup.Use(f1(true))
{
shopGroup.GET("/index", func(c *gin.Context) {...})
...
}

浙公网安备 33010602011771号