Go语言标准库之template

本文是李文周的博客go语言学习之路的目录提要版,方便复习查看使用,原文参见文章连接:

https://www.liwenzhou.com/posts/Go/go_menu/和另外一篇

https://blog.csdn.net/TDCQZD/article/details/82634052

html/template包实现了数据驱动的模板,用于生成可防止代码注入的安全的HTML内容。它提供了和text/template包相同的接口,Go语言中输出HTML的场景都应使用html/template这个包。

Go语言标准库之http/template总结

模板与渲染

在一些前后端不分离的Web架构中,我们通常需要在后端将一些数据渲染到HTML文档中,从而实现动态的网页(网页的布局和样式大致一样,但展示的内容并不一样)效果。

我们这里说的模板可以理解为事先定义好的HTML文档文件,模板渲染的作用机制可以简单理解为文本替换操作–使用相应的数据去替换HTML文档中事先准备好的标记。

很多编程语言的Web框架中都使用各种模板引擎,比如Python语言中Flask框架中使用的jinja2模板引擎。

Go语言的模板引擎

Go语言内置了文本模板引擎text/template和用于HTML文档的html/template。它们的作用机制可以简单归纳如下:

  1. 模板文件通常定义为.tmpl.tpl为后缀(也可以使用其他的后缀),必须使用UTF8编码。
  2. 模板文件中使用{ { }}包裹和标识需要传入的数据。
  3. 传给模板这样的数据就可以通过点号(.)来访问,如果数据是复杂类型的数据,可以通过{ { .FieldName }}来访问它的字段。
  4. { { }}包裹的内容外,其他内容均不做修改原样输出。

Go语言模板引擎的使用可以分为三部分:定义模板文件、解析模板文件和模板渲染.

基本示例

定义模板文件

我们按照Go模板语法定义一个hello.tmpl的模板文件,内容如下

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Hello</title>
</head>
<body>
    <p>Hello {
  {.}}</p>
</body>
</html>

解析和渲染模板文件

然后我们创建一个main.go文件,在其中写下HTTP server端代码如下:

// main.go

func sayHello(w http.ResponseWriter, r *http.Request) {
   
	// 解析指定文件生成模板对象
	tmpl, err := template.ParseFiles("./hello.tmpl")
	if err != nil {
   
		fmt.Println("create template failed, err:", err)
		return
	}
	// 利用给定数据渲染模板,并将结果写入w
	tmpl.Execute(w, "沙河小王子")
}
func main() {
   
	http.HandleFunc("/", sayHello)
	err := http.ListenAndServe(":9090", nil)
	if err != nil {
   
		fmt.Println("HTTP server failed,err:", err)
		return
	}
}

使用gin框架:

package main

import (
   "fmt"
   "github.com/gin-gonic/gin"
   "html/template"
)

func sayHello(context *gin.Context) {
   
   // 解析模板
   t, err :=template.ParseFiles("./hello.tmpl")
   if err != nil{
   
      fmt.Println("parse File error!")
      return
   }
   // 渲染模板
   t.Execute(context.Writer, "小王子")
}

func main(
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值