你确定不学?Go标准库之 text/template

简介: 你确定不学?Go标准库之 text/template

在许多编程场景中,我们经常需要把数据按照某种格式进行输出,比如生成HTML页面,或者生成配置文件。这时,我们就需要模板引擎的帮助。幸运的是,Go语言在标准库中就提供了两个强大的模板引擎:text/templatehtml/template


初级应用

text/template库的使用

text/template库用于生成任何基于文本的格式。它使用双大括号{{}}来定义模板的动态部分。让我们通过一个简单的例子来看一下它的使用方法。

package main

import (
  "os"
  "text/template"
)

func main() {
  // 模板字符串
  const tpl = `Hi, {{.Name}}! Welcome to {{.Website}}.`

  // 准备模板数据
  data := struct {
    Name    string
    Website string
  }{
    Name:    "Go语言中文网",
    Website: "https://studygolang.com",
  }

  // 创建模板对象并解析模板字符串
  tmpl, err := template.New("test").Parse(tpl)
  if err != nil {
    panic(err)
  }

  // 使用数据渲染模板,并将结果输出到标准输出
  err = tmpl.Execute(os.Stdout, data)
  if err != nil {
    panic(err)
  }
}

上面的代码中,我们首先定义了一个模板字符串tpl,然后创建一个模板对象并解析这个字符串,最后将准备好的数据传递给模板,模板就会按照预定的格式把数据渲染进去。

html/template库的使用

html/template库实际上是text/template库的超集,它比text/template库多了一些针对HTML格式的功能。尤其是,html/template库能够对插入到HTML页面的内容进行适当的转义,以防止一些常见的安全问题,如XSS攻击。下面的例子展示了如何使用html/template库来生成一个HTML页面。

package main

import (
  "html/template"
  "os"
)

type Person struct {
  Name string
  Age  int
}

func main() {
  const tpl = `
  <!DOCTYPE html>
  <html>
    <head>
      <title>Hello</title>
    </head>
    <body>
      <h1>Hello, {{.Name}}</h1>
      <p>You are {{.Age}} years old.</p>
    </body>
  </html>`

  data := Person{
    Name: "Go语言中文网",
    Age:  7,
  }

  tmpl, err := template.New("test").Parse(tpl)
  if err != nil {
    panic(err)
  }

  err = tmpl.Execute(os.Stdout, data)
  if err != nil {
    panic(err)
  }
}

启动程序,你会在控制台看到生成的HTML代码。

这两个标准库使得在Golang中使用模板变得非常容易。在Go web开发中,进行HTML渲染时,我们通常会选用html/template库。而在需要处理一般的文本格式时,我们选择text/template库。

进阶应用

除了基本的模板渲染之外,html/templatetext/template 库还提供了一些更高级的模板操作。这需要让我们理解模板的一个重要概念:管道(pipeline)。管道可以让我们在模板中进行更为复杂的逻辑处理,例如条件判断、循环以及自定义函数。

  1. 条件判断 使用{{if}}...{{end}}{{else}}语句
 const tpl = `Hi, {{if .Married}}Mr{{else}}Miss{{end}}, {{.Name}}`
 tmpl, err := template.New("test").Parse(tpl)
 if err != nil {
     log.Fatal(err)
 }

 data := struct {
     Name    string
     Married bool
 }{
     Name:    "Go语言中文网",
     Married: false,
 }

 err = tmpl.Execute(os.Stdout, data)
 if err != nil {
     log.Fatal(err)
 }
  1. 循环 使用{{range}}...{{end}}语句
 const tpl = `{{range .}} Hi, {{.Name}}.{{end}}`
 tmpl, err := template.New("test").Parse(tpl)
 if err != nil {
     log.Fatal(err)
 }

 data := [] struct {
     Name    string
 }{
     {"Go语言"},
     {"C语言"},
     {"Python"},
 }

 err = tmpl.Execute(os.Stdout, data)
 if err != nil {
     log.Fatal(err)
 }
  1. 自定义函数
    我们还可以定义自定义的函数,并在模板中使用它们。这是通过Funcs方法来实现的:
 func ToUpper(str string) string {
     return strings.ToUpper(str)
 }

 const tpl = `Hi, {{.Name | toUpper}}.`
 tmpl, err := template.New("test").Funcs(template.FuncMap{
     "toUpper": ToUpper,
 }).Parse(tpl)
 if err != nil {
     log.Fatal(err)
 }

 data := struct {
     Name string
 }{
     Name: "Go语言中文网",
 }

 err = tmpl.Execute(os.Stdout, data)
 if err != nil {
     log.Fatal(err)
 }
相关文章
|
4月前
|
Shell Go API
Go语言grequests库并发请求的实战案例
Go语言grequests库并发请求的实战案例
|
2月前
|
JSON Go 开发者
go-carbon v2.5.0 发布,轻量级、语义化、对开发者友好的 golang 时间处理库
carbon 是一个轻量级、语义化、对开发者友好的 Golang 时间处理库,提供了对时间穿越、时间差值、时间极值、时间判断、星座、星座、农历、儒略日 / 简化儒略日、波斯历 / 伊朗历的支持。
41 4
|
2月前
|
存储 Cloud Native Shell
go库介绍:Golang中的Viper库
Viper 是 Golang 中的一个强大配置管理库,支持环境变量、命令行参数、远程配置等多种配置来源。本文详细介绍了 Viper 的核心特点、应用场景及使用方法,并通过示例展示了其强大功能。无论是简单的 CLI 工具还是复杂的分布式系统,Viper 都能提供优雅的配置管理方案。
|
2月前
|
JSON 安全 网络协议
go语言使用内置函数和标准库
【10月更文挑战第18天】
21 3
|
2月前
|
JSON 监控 安全
go语言选择合适的工具和库
【10月更文挑战第17天】
15 2
|
2月前
|
存储 Go PHP
Go语言中的加解密利器:go-crypto库全解析
在软件开发中,数据安全和隐私保护至关重要。`go-crypto` 是一个专为 Golang 设计的加密解密工具库,支持 AES 和 RSA 等加密算法,帮助开发者轻松实现数据的加密和解密,保障数据传输和存储的安全性。本文将详细介绍 `go-crypto` 的安装、特性及应用实例。
91 0
|
3月前
|
Linux 编译器 Go
cgo--在Go中链接外部C库
cgo--在Go中链接外部C库
|
Go 网络协议 应用服务中间件
Go 标准库 http.FileServer 实现静态文件服务
http.FileServer 方法属于标准库 net/http,返回一个使用 FileSystem 接口 root 提供文件访问服务的 HTTP 处理器。可以方便的实现静态文件服务器。
2026 0
|
8天前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
44 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用