安装
要安装 Gin 软件包,需要先安装 Go 并设置 Go 工作区。
1.下载并安装 gin:
$ go get -u github.com/gin-gonic/gin
2.将 gin 引入到代码中:
import "github.com/gin-gonic/gin"
*可以采用mod在控制台输入,自动下载所有依赖
go mod tidy
简单的使用样例
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() // 监听并在 0.0.0.0:8080 上启动服务
}
- 第一行导入了Gin框架的包。
- 在 main() 函数中,创建了一个默认的Gin引擎实例 r。
- 使用 r.GET() 方法创建了一个 GET 请求路由,该路由的路径为 "/ping",当收到该路径的 GET 请求时,将执行后面的匿名函数。
- 匿名函数中使用了 c.JSON() 方法来返回一个JSON格式的响应,其中状态码为 200,返回的JSON数据为 gin.H{"message": "pong"}。
- 最后使用 r.Run() 方法启动Web服务,监听 0.0.0.0:8080 地址。(默认8080端口,可以采用添加变量指定启动的端口,例如r.Run(":9090"))
这段代码创建了一个简单的Web服务,当收到 "/ping" 路径的 GET 请求时,返回一个JSON格式的响应,其中包含 message 属性值为 "pong"。可以使用浏览器或者其他HTTP客户端向该服务发送GET请求,查看响应结果。
模板渲染
在Gin中,模板引擎被称为template模板
- 模板文件格式:Gin采用的是Go语言内置的模板引擎,因此模板文件的格式与Go语言的文件格式相同,以 .gohtml 为后缀。可以在模板文件中使用Go语言的语法和函数。
- 模板函数:Gin提供了一些内置的模板函数,例如html、url、js等,可以在模板文件中调用。此外,还可以自定义模板函数以满足特定的需求。
- 模板变量:在执行模板文件时,可以传递变量给模板文件,模板文件可以通过这些变量来动态生成内容。变量可以是任何类型的数据,例如字符串、数字、结构体等。
- 模板继承:Gin的模板引擎支持模板继承,可以使用 {{define}} 和 {{template}} 指令来定义和使用模板块。模板继承可以使模板文件的结构更加清晰,同时也方便了模板的复用。
- 模板缓存:为了提高性能,Gin会将已经解析的模板文件缓存起来,下次使用时直接从缓存中读取。如果需要在开发阶段动态修改模板文件,则可以通过设置 Gin.DebugMode 来关闭模板缓存。
- 模板渲染:在Gin中,可以通过 c.HTML() 或者 c.Render() 方法来渲染模板文件,并将结果返回给客户端。在渲染模板文件时,需要传递模板文件名和需要的变量。
简单的模板渲染
使用 LoadHTMLGlob() 或者 LoadHTMLFiles()
func main() {
//定义一个默认路由
router := gin.Default()
//加载HTML模板文件
router.LoadHTMLGlob("templates/*")
//router.LoadHTMLFiles("templates/template1.html", "templates/template2.html")
router.GET("/index", func(c *gin.Context) {
c.HTML(http.StatusOK, "index.tmpl", gin.H{
"title": "Main website",
})
})
router.Run(":9090")
}
上述代码中,第五行使用 router.LoadHTMLGlob() 方法加载了 templates 目录下的所有HTML模板文件。LoadHTMLGlob() 方法会根据传入的模板文件路径模式加载匹配的所有文件,例如上面的例子会加载 templates 目录下所有以 .tmpl 为后缀的文件。
<!--templates/index.tmpl-->
<html>
<h1>
{{ .title }}
</h1>
</html>
运行结果为Main website大标签的页面
模板嵌套
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<title>Hello</title>
</head>
<body>
{{template "ul.tmpl"}}
<hr>
{{template "ol.tmpl"}}
<p>hello {{.Name}}</p>
</body>
</html>
{{/*定义ol.tmpl模板*/}}
{{define "ol.tmpl"}}
<ul>
<li>注册</li>
<li>日志</li>
</ul>
{{end}}
-
基础模板 base.html 定义了整个页面的基本结构,包括头部、尾部和中间的内容。在内容部分,使用 {{template "ul.tmpl"}} 和 {{template "ol.tmpl"}} 分别引用了子模板 ul.tmpl 和 ol.tmpl。
-
子模板 ol.tmpl 定义了一个无序列表。在基础模板中使用 {{template "ol.tmpl"}} 引用子模板 ol.tmpl,将其嵌入到基础模板中。
-
在基础模板中使用 {{.Name}} 输出了一个变量 Name。
这段代码的模板嵌套实现了基础模板和子模板之间的继承关系,子模板 ol.tmpl 继承了基础模板 base.html 的内容,并在其基础上添加了一个无序列表。在基础模板中,使用 {{template "ol.tmpl"}} 将子模板 ol.tmpl 嵌入到基础模板中,从而实现了模板嵌套。
模板继承与重新定义
{{/*继承根模板*/}}
{{template "base.tmpl" .}}
{{/*重新定义块模板*/}}
{{define "content"}}
<h1>这是home页面</h1>
<p>Hello {{ . }}</p>
{{end}}
- 使用注释 {{/继承根模板/}} 表示该模板要继承的是名为 base.tmpl 的根模板。在Gin框架中,可以使用 {{template "base.tmpl" .}} 来引用根模板。其中,. 表示当前模板所使用的变量。
- 使用 {{define "content"}} 定义了一个名为 content 的模板块,该模板块包含了一个标题和一段文本。在基础模板中,可以使用 {{template "content" .}} 来引用该模板块。其中,. 表示当前模板所使用的变量。