当前位置: 首页 > news >正文

Golang轻松实现消息模板变量替换:text/template

text/template 是 Go 语言标准库中的一个包,用于生成文本输出。它通过解析模板并根据给定的数据执行模板来生成最终的文本。text/template 提供了强大的模板引擎,支持条件判断、循环、变量替换等功能。

基本概念

  1. 模板:模板是一个文本文件或字符串,其中包含一些特殊的占位符或控制结构,用于动态生成内容。
  2. 数据:数据是一个 Go 语言的结构体、映射或其他数据结构,模板引擎会根据这些数据来填充模板中的占位符。
  3. 动作:动作是模板中的特殊语法,用于控制模板的解析和执行过程。动作以 {{ 开始,以 }} 结束。

模板语法

1. 变量替换

最简单的模板动作是变量替换。使用 {{.}} 来表示当前上下文的根对象,使用 {{.FieldName}} 来访问结构体的字段。

package mainimport ("os""text/template"
)type Person struct {Name stringAge  int
}func main() {p := Person{Name: "Alice", Age: 30}tmpl := "Name: {{.Name}}, Age: {{.Age}}\n"t := template.Must(template.New("person").Parse(tmpl))t.Execute(os.Stdout, p)
}

输出:

Name: Alice, Age: 30
2. 条件判断

text/template 支持 if-else 条件判断。

package mainimport ("os""text/template"
)type Person struct {Name stringAge  int
}func main() {p := Person{Name: "Alice", Age: 30}tmpl := "{{if gt .Age 18}}Adult{{else}}Child{{end}}\n"t := template.Must(template.New("person").Parse(tmpl))t.Execute(os.Stdout, p)
}

输出:

Adult
3. 循环

text/template 支持 range 循环,用于遍历数组、切片或映射。

package mainimport ("os""text/template"
)type Person struct {Name    stringHobbies []string
}func main() {p := Person{Name: "Alice", Hobbies: []string{"Reading", "Swimming", "Coding"}}tmpl := "Name: {{.Name}}\nHobbies:\n{{range .Hobbies}}- {{.}}\n{{end}}"t := template.Must(template.New("person").Parse(tmpl))t.Execute(os.Stdout, p)
}

输出:

Name: Alice
Hobbies:
- Reading
- Swimming
- Coding
4. 函数调用

text/template 支持在模板中调用自定义函数。

package mainimport ("os""text/template""strings"
)type Person struct {Name string
}func main() {p := Person{Name: "Alice"}funcMap := template.FuncMap{"ToUpper": strings.ToUpper,}tmpl := "Name: {{.Name | ToUpper}}\n"t := template.Must(template.New("person").Funcs(funcMap).Parse(tmpl))t.Execute(os.Stdout, p)
}

输出:

Name: ALICE
5. 嵌套模板

text/template 支持模板嵌套,可以使用 definetemplate 动作来定义和引用嵌套模板。

package mainimport ("os""text/template"
)type Person struct {Name string
}func main() {p := Person{Name: "Alice"}tmpl := `{{define "T1"}}Hello, {{.Name}}!{{end}}{{template "T1" .}}`t := template.Must(template.New("person").Parse(tmpl))t.Execute(os.Stdout, p)
}

输出:

Hello, Alice!

模板解析和执行过程

  1. 解析模板:使用 template.New 创建一个新的模板对象,然后使用 ParseParseFiles 方法解析模板内容。
  2. 执行模板:使用 ExecuteExecuteTemplate 方法执行模板,并将结果写入指定的输出流(如 os.Stdout 或文件)。

错误处理

在解析和执行模板时,可能会遇到错误。可以使用 Must 函数来简化错误处理,如果解析或执行过程中出现错误,Must 会直接抛出 panic。

t := template.Must(template.New("person").Parse(tmpl))
http://www.lryc.cn/news/536370.html

相关文章:

  • DeepSeek模型R1服务器繁忙,怎么解决?
  • 《探秘Windows 10驱动开发:从入门到实战》
  • Golang的容器化部署流程
  • 计算机网络,大白话
  • 智慧城市V4系统小程序源码独立版全插件全开源
  • SpringBoot分布式应用程序和数据库在物理位置分配上、路由上和数量上的最佳实践是什么?
  • 【LeetCode Hot100 哈希】两数之和、字母异位词分组、最长连续序列
  • Jenkins 通过 Execute Shell 执行 shell 脚本 七
  • 无人机常见的定位方式
  • 【Git版本控制器】:第一弹——Git初识,Git安装,创建本地仓库,初始化本地仓库,配置config用户名,邮箱信息
  • 使用 EDOT 监测由 OpenAI 提供支持的 Python、Node.js 和 Java 应用程序
  • 基于 STM32 的病房监控系统
  • 线上HBase client返回超时异常分析 HBase callTimeout=60000
  • 03.开闭原则详细介绍
  • 前端职业规划
  • 杂记:STM32 调试信息打印实现方式
  • python+unity落地方案实现AI 换脸融合
  • ComfyUI流程图生图原理详解
  • 【C++ 真题】P1824 进击的奶牛
  • 26、深度学习-自学之路-NLP自然语言处理-理解加程序,怎么把现实的词翻译给机器识别。
  • 24电子信息类研究生复试面试问题汇总 电子信息类专业知识问题最全!电子信息复试全流程攻略 电子信息考研复试真题汇总
  • leetcode25. K 个一组翻转链表
  • 工厂方法模式详解(Java)
  • SpringBoot+Dubbo+zookeeper 急速入门案例
  • pdf.js默认显示侧边栏和默认手形工具
  • 数据库第三次作业
  • 渗透利器:YAKIT 工具-基础实战教程.
  • 变分边界详解
  • 计算机毕业设计——Springboot餐厅点餐系统
  • Dav_笔记14:优化程序提示 HINTs -3