text/template用法

1. 模板标签

模板标签用"{{"和"}}"括起来

2. 注释

# 使用"{{/*"和"*/}}"来包含注释内容
{{/* a comment */}}

3. 变量

# 输出当前变量值
{{.}}

# 输出struct对象中字段或方法名称为"Abc"的值。
{{.Abc}}

# 定义变量
# 变量名用字母和数字组成并带上"$"前缀,采用符号":="进行赋值。
{{$article := "hello"}}

# 调用方法"Func",并传递参数,输出其返回值。
# 方法必须有一到两个返回值,如果是两个,第二个一定是error接口类型
{{.Func "参数1" "参数2"}}

4. 判断

{{if .condition1}} T1 {{else if .contition2}} T0 {{end}}

# and 与
{{if and .condition1 .condition2}} T1 {{end}}

# or 或
{{if or .condition1 .condition2}} T1 {{end}}

# not 非
{{if not .condition}} T1 {{end}}

# eq 等于
{{if eq .var1 .var2}} T1 {{end}}
 
# ne 不等于
{{if ne .var1 .var2}} T1 {{end}}
 
# lt 小于
{{if lt .var1 .var2}} T1 {{end}}

# le 小于等于
{{if le .var1 .var2}} T1 {{end}}

# gt 大于
{{if gt .var1 .var2}} T1 {{end}}
 
# ge 大于等于
{{if ge .var1 .var2}} T1 {{end}}

5. 遍历

# 通过i,v来访问
{{range $i, $v := .slice}} {{$i}} => {{$v}} {{end}}

# 通过.来访问
{{range .slice}} {{.}} {{end}}

# 当没有可遍历值时,执行else
{{range .slice}} T1 {{else}} T0 {{end}}

6. 子模板嵌套

{{define "T1"}}ONE{{end}}
{{define "T2"}}TWO{{end}}
{{define "T3"}}{{template "T1"}} {{template "T2"}}{{end}}
{{template "T3"}}
输出:
ONE TWO

7. 示例

7.1 字符串模板
type Inventory struct {
	Material string
	Count    uint
}

func main() {
	sweaters := Inventory{"wool", 17}
	tmpl, err := template.New("test").Parse("{{.Count}} of {{.Material}}\n") // {{.Count}}获取struct的Count值
	if err != nil {
		panic(err)
	}
	err = tmpl.Execute(os.Stdout, sweaters) //返回 17 of wool
	if err != nil {
		panic(err)
	}
}
7.2 文件模板
type Inventory struct {
	Material string
	Count    uint
}

/*
# cat templateContent.txt
{{.Count}} of {{.Material}}
*/
func main() {
	sweaters := Inventory{"wool", 17}
	tmpl, err := template.ParseFiles("templateContent.txt") //这里不需要使用new(),因为会默认使用文件名来命名
	if err != nil {
		panic(err)
	}
	err = tmpl.Execute(os.Stdout, sweaters) //返回 17 of wool
	if err != nil {
		panic(err)
	}
}
7.3 调用方法
type MyMethod struct {
	Name string
}

func (my *MyMethod) SayHello() string { //没参数
	return "hello world"
}

func (my *MyMethod) SayYouName(name string) string { //有参数
	return "my name is : " + name
}

func main() {
	mine := &MyMethod{Name: "boss"}
	tmpl, err := template.New("test").Parse("{{.SayHello}}\n{{.SayYouName .Name}}\n")
	if err != nil {
		panic(err)
	}
	err = tmpl.Execute(os.Stdout, mine)
	if err != nil {
		panic(err)
	}
	// out:
	// hello world
	// my name is : boss
}

8. 文本和空格

空白符:空格,水平制表符,回车符和换行符。
默认情况下,在执行模板时,动作之间的所有文本都会逐字复制。
  * 在左分隔符 “{{” 后面紧跟着一个减号和ASCII空格字符 “{{- “,则紧接在文本之前所有尾随空白符都将删除。
  * 在右分隔符 “}}” 前面有空格和减号” -}}”,则紧随其后的文本所有前导空格都将删除。

"{{23 -}} < {{- 45}}"

# 生成的输出将是
"23<45"
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值