学习笔记:Gin框架笔记1 | 青训营

99 阅读4分钟

安装

要安装 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 上启动服务
}
  1. 第一行导入了Gin框架的包。
  2. 在 main() 函数中,创建了一个默认的Gin引擎实例 r。
  3. 使用 r.GET() 方法创建了一个 GET 请求路由,该路由的路径为 "/ping",当收到该路径的 GET 请求时,将执行后面的匿名函数。
  4. 匿名函数中使用了 c.JSON() 方法来返回一个JSON格式的响应,其中状态码为 200,返回的JSON数据为 gin.H{"message": "pong"}。
  5. 最后使用 r.Run() 方法启动Web服务,监听 0.0.0.0:8080 地址。(默认8080端口,可以采用添加变量指定启动的端口,例如r.Run(":9090"))

这段代码创建了一个简单的Web服务,当收到 "/ping" 路径的 GET 请求时,返回一个JSON格式的响应,其中包含 message 属性值为 "pong"。可以使用浏览器或者其他HTTP客户端向该服务发送GET请求,查看响应结果。

模板渲染

在Gin中,模板引擎被称为template模板

  1. 模板文件格式:Gin采用的是Go语言内置的模板引擎,因此模板文件的格式与Go语言的文件格式相同,以 .gohtml 为后缀。可以在模板文件中使用Go语言的语法和函数。
  2. 模板函数:Gin提供了一些内置的模板函数,例如html、url、js等,可以在模板文件中调用。此外,还可以自定义模板函数以满足特定的需求。
  3. 模板变量:在执行模板文件时,可以传递变量给模板文件,模板文件可以通过这些变量来动态生成内容。变量可以是任何类型的数据,例如字符串、数字、结构体等。
  4. 模板继承:Gin的模板引擎支持模板继承,可以使用 {{define}} 和 {{template}} 指令来定义和使用模板块。模板继承可以使模板文件的结构更加清晰,同时也方便了模板的复用。
  5. 模板缓存:为了提高性能,Gin会将已经解析的模板文件缓存起来,下次使用时直接从缓存中读取。如果需要在开发阶段动态修改模板文件,则可以通过设置 Gin.DebugMode 来关闭模板缓存。
  6. 模板渲染:在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}}
  1. 基础模板 base.html 定义了整个页面的基本结构,包括头部、尾部和中间的内容。在内容部分,使用 {{template "ul.tmpl"}} 和 {{template "ol.tmpl"}} 分别引用了子模板 ul.tmpl 和 ol.tmpl。

  2. 子模板 ol.tmpl 定义了一个无序列表。在基础模板中使用 {{template "ol.tmpl"}} 引用子模板 ol.tmpl,将其嵌入到基础模板中。

  3. 在基础模板中使用 {{.Name}} 输出了一个变量 Name。

这段代码的模板嵌套实现了基础模板和子模板之间的继承关系,子模板 ol.tmpl 继承了基础模板 base.html 的内容,并在其基础上添加了一个无序列表。在基础模板中,使用 {{template "ol.tmpl"}} 将子模板 ol.tmpl 嵌入到基础模板中,从而实现了模板嵌套。

模板继承与重新定义

{{/*继承根模板*/}}  
    {{template "base.tmpl" .}}  
{{/*重新定义块模板*/}}  
{{define "content"}}  
    <h1>这是home页面</h1>  
    <p>Hello {{ . }}</p>  
{{end}}
  1. 使用注释 {{/继承根模板/}} 表示该模板要继承的是名为 base.tmpl 的根模板。在Gin框架中,可以使用 {{template "base.tmpl" .}} 来引用根模板。其中,. 表示当前模板所使用的变量。
  2. 使用 {{define "content"}} 定义了一个名为 content 的模板块,该模板块包含了一个标题和一段文本。在基础模板中,可以使用 {{template "content" .}} 来引用该模板块。其中,. 表示当前模板所使用的变量。