开始
// main.go
func main() {
r := gin.Default()
r.LoadHTMLGlob("./templates/**/*")
//r.LoadHTMLFiles("./templates/index/index.tmpl", "./templates/index/form.tmpl")
r.GET("/", func)
r.Run(":9000")
}
路由
// 普通
r.GET("/", func)
// 伪静态(:占位符必传,*占位非必传)
r.GET("/article/:id", func)
c.Param("id")
r.GET("/index/*page", func)
c.Param("page")
参数
// Get参数
id := c.Query("id")
id := c.QueryArray("id")
id := c.QueryMap("id")
id := c.DefaultQuery("id", "1")
// Post参数
username := c.PostForm("username")
id := c.PostFormArray("id")
idMap := c.PostFormMap("id_map")
password := c.DefaultPostForm("password", "123456")
文件
// 单文件
c.FormFile("file")
c.SaveUploadedFile(file, dst+filename+ext)
// 多文件
form, _ := c.MultipartForm()
files := form.File["upload[]"]
for _, file := range files {
log.Println(file.Filename)
// 上传文件至指定目录
c.SaveUploadedFile(file, dst)
}
模板
// 注释
{{/* 注释 */}}
// 定义模板
{{ define "name" }}
{{ end }}
// 使用模板
{{ template "name" . }}
// 判断
{{ if .value }}
{{ else }}
{{ end }}
// 循环,支持 else
{{ range $k,$v := .value }}
{{ else }}
{{ end }}
// URL转码
{{ urlquery "https://www.example.com/" }}
// 获取 数组、map 指定值
{{ index .value key}}
// 都为真才会显示最后一个(一个为空那么整体为空,否则显示最后一个)
{{ and .name .age }}
// 显示第一个为真的
{{ or .name .age }}
// 布尔取反
{{ not .name }}
// 等于(eq支持多个参数,其他不支持。类似于PHP in_array函数)
{{ eq .num 17 }}
// 不等于
{{ ne .num 17 }}
// 小于
{{ lt .num 17 }}
// 小于等于
{{ le .num 17 }}
// 大于
{{ gt .num 17 }}
// 大于等于
{{ ge .num 17 }}
数据绑定
// todo
路由组
v2 := r.Group("/v2")
{
v2.GET("/", func(c *gin.Context) {
c.String(http.StatusOK, "Ok")
})
}
中间件
// 全局
r.Use(func...)
// 局部
r.GET("/", middleware, func)
// 后置
func (c *gin.Content) {
c.Next()
// todo
}