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

【go从零单排】Text Templates

挪威特罗姆瑟夜景

🌈Don’t worry , just coding!
内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。

📗概念

Go 中的文本模板(Text Templates)是通过 text/template 包提供的功能,允许开发者创建动态文本输出。这些模板可以用于生成 HTML、配置文件、报告等多种文本格式。

💻代码

Text Templates

package main

//导入了 os(用于处理操作系统功能)和 text/template(用于处理文本模板)包。
import (
	"os"
	"text/template"
)

func main() {
	//创建一个新的模板 t1,并解析模板字符串 "Value is {{.}}\n"。其中 {{.}} 是一个占位符,表示传递给模板的数据。
	t1 := template.New("t1")
	t1, err := t1.Parse("Value is {{.}}\n")
	if err != nil {
		panic(err)
	}
	//使用 Must 方法确保模板解析成功。如果解析失败,会引发panic。这里又解析了一个模板字符串 "Value: {{.}}\n"。
	t1 = template.Must(t1.Parse("Value: {{.}}\n"))
	//执行模板 t1,将字符串 "some text" 传递给模板,输出结果为 Value: some text。
	t1.Execute(os.Stdout, "some text")
	//执行模板 t1,将整数 5 传递给模板,输出结果为 Value: 5。
	t1.Execute(os.Stdout, 5)
	//执行模板 t1,将字符串切片传递给模板,输出结果为 Value: [Go Rust C++ C#](切片会以字符串形式输出)。
	t1.Execute(os.Stdout, []string{
		"Go",
		"Rust",
		"C++",
		"C#",
	})
	//定义一个名为 Create 的函数,用于创建和解析新的模板。它接受模板名称和模板字符串作为参数,并返回解析后的模板。
	Create := func(name, t string) *template.Template {
		return template.Must(template.New(name).Parse(t))
	}
	//使用 Create 函数创建模板 t2,模板字符串为 "Name: {{.Name}}\n"。
	//这里的 {{.Name}} 表示要访问传递数据中的 Name 字段。
	t2 := Create("t2", "Name: {{.Name}}\n")
	//执行模板 t2,传递一个匿名结构体,输出结果为 Name: Jane Doe。
	t2.Execute(os.Stdout, struct {
		Name string
	}{"Jane Doe"})
	//执行模板 t2,传递一个字典(map),输出结果为 Name: Mickey Mouse。
	t2.Execute(os.Stdout, map[string]string{
		"Name": "Mickey Mouse",
	})
	//创建模板 t3,包含条件语句。{{if .}} 检查传入的数据是否为真值。
	t3 := Create("t3",
		"{{if . -}} yes {{else -}} no {{end}}\n")
	//执行模板 t3,传递空字符串,输出结果为 no。
	t3.Execute(os.Stdout, "not empty")
	t3.Execute(os.Stdout, "")
	//创建模板 t4,使用 {{range .}} 遍历传入的数据。
	t4 := Create("t4",
		"Range: {{range .}}{{.}} {{end}}\n")
	//执行模板 t4,传递字符串切片,输出结果为 Range: Go Rust C++ C#。
	t4.Execute(os.Stdout,
		[]string{
			"Go",
			"Rust",
			"C++",
			"C#",
		})
}
//输出
//Value: some text
//Value: 5
//Value: [Go Rust C++ C#]
//Name: Jane Doe
//Name: Mickey Mouse
//yes 
//no 
//Range: Go Rust C++ C# 

🔍理解

  • 模板:模板是包含占位符的文本字符串,这些占位符会在执行模板时被替换为实际值。
  • 数据:模板执行时需要传入数据,这些数据可以是基本类型、结构体、切片、映射等。
  • 在解析和执行模板时,建议使用 Must 函数来处理错误,这样可以在发生错误时立即引发panic,便于调试。

💡 Tips

模版方法

  • 使用 template.New() 创建新模板
  • Parse() 方法解析模板字符串
  • 使用 Execute() 方法将数据传递给模板
  • 使用 {{.}} 访问当前数据。
  • 对于结构体,可以使用 {{.FieldName}} 来访问字段

模版其他功能

  • 自定义函数:可以为模板添加自定义函数,使用 template.FuncMap。
  • 模板嵌套:可以将一个模板嵌套在另一个模板中。
  • 模板继承:可以通过定义基础模板并在其他模板中引用来实现模板的继承。

💪无人扶我青云志,我自踏雪至山巅。
在这里插入图片描述


http://www.kler.cn/a/392587.html

相关文章:

  • 论文解析:边缘计算网络中资源共享的分布式协议(2区)
  • 豆瓣均分9:不容错过的9本大模型入门宝藏书籍,非常详细收藏我这一篇就够了
  • Jmeter性能测试 -3数据驱动实战
  • 24.11.13 Javascript3
  • MYSQL 库,表 基本操作
  • FreeRTOS学习13——任务相关API函数
  • 单体架构VS微服务架构
  • 高阶函数全解析(定义、应用 -- 函数柯理化 反柯理化 发布订阅模式 观察者模式)
  • 执行npm run build -- --report后,生产report.html文件是什么?
  • kafka是如何处理数据乱序问题的?
  • Java代码操作ZooKeeper(使用原生 ZooKeeper 客户端库)
  • UE5 设置Sequence播完后返回起始位置
  • hadoop报错找不到主类
  • 苹果低价版Vision Pro 推迟至2027年发布:XR领域的变局与挑战
  • TypeORM在Node.js中的应用
  • 缓存雪崩问题及解决方法
  • C# 异步Task异常处理和堆栈追踪显示
  • iOS 18.1,未公开的新功能
  • OpenStack讲解和实例
  • 2022年蓝桥杯JavaB组 省赛 题目解析(含AC_Code)
  • 【达梦数据库】MYSQL迁移到DM字符集转换问题-UTF8mb4|转UTF8(UTF8mb3)
  • Dubbo 3.x源码(25)—Dubbo服务引用源码(8)notify订阅服务通知更新
  • AI绘画经验(stable-diffusion)
  • 如何理解DDoS安全防护在企业安全防护中的作用
  • 力扣(LeetCode)611. 有效三角形的个数(Java)
  • adworld - stack2