关于点"."和作用域
{{.}}代表当前对象,{{.name}}代表当前对象的name属性
输入 | 模板 | 结果 |
---|---|---|
zhangyu | My Name is {{.}} | My Name is zhangyu |
{“name”:“zhangyu”} | My Name is {{.name}} | My Name is zhangyu |
{“people”:{“name”:“zhangyu”,“alias”:“zy”}} | {{with .people}}My Name is {{.name}}, my alias is {{.alias}}{{end}} | My Name is zhangyu, my alias is zy. |
去除空白(包括换行符、制表符、空格等)
可以在{{符号的后面加上"- “来去除它前面的空白,即{{- xxxx}}
在}}的前面加上”-"来去除它后面的空白,即{{xxxx -}}。
- {{23}} < {{45}} -> 23 < 45
- {{23}} < {{- 45}} -> 23 <45
- {{23 -}} < {{45}} -> 23< 45
- {{23 -}} < {{- 45}} -> 23<45
条件判断
- {{if pipeline}} T1 {{end}}
- {{if pipeline}} T1 {{else}} T0 {{end}}
- {{if pipeline}} T1 {{else if pipeline}} T0 {{end}}
需要注意的是,pipeline为false的情况是各种数据对象的0值:数值0,指针或接口是nil,数组、slice、map或string则是len为0。
range…end迭代
- {{range pipeline}} T1 {{end}}
- {{range pipeline}} T1 {{else}} T0 {{end}}
range可以迭代slice、数组、map或channel。迭代的时候,会设置"."为当前正在迭代的元素。
示例
temp := `今日数据:
{{with .owner}}共有{{.projectCount}}个项目提交代码,{{.userCount}}个开发者加入开发。{{end}}
{{with .user}}今天提交{{.uploadTimes}}次,共计{{.codeLines}}行代码;
{{- with .commitMsgNumber}}
每次的提交信息为{{- range $k,$v :=.}} {{- if (ne $k 0)}}、{{end}}{{.}}{{end -}}
{{else}},每次都未写提交信息{{end}}。
{{end}}
`
ownerParams := map[string]interface{}{
"owner": map[string]interface{}{
"projectCount": 10,
"userCount": 5,
},
"user": map[string]interface{}{
"uploadTimes": "2",
"codeLines": "200",
"commitMsgNumber": []string{
"初始化项目架构", "完成开发", "自测完成",
},
},
}
t := template.Must(template.New("DailyData").Parse(temp))
var r bytes.Buffer
err := t.Execute(&r, ownerParams)
if err != nil {
fmt.Println(err)
}
fmt.Println(r.String())
运行结果
可修改ownerParams查看不同的入参对应的输出结果:https://play.studygolang.com/p/nTh–hvUOe9
今日数据:
共有10个项目提交代码,5个开发者加入开发。
今天提交2次,共计200行代码;
每次的提交信息为初始化项目架构、完成开发、自测完成。
运行调试
- https://play.studygolang.com/p/5h6uW04vCwA
- templateString:填写数据库插入的模板
- messageData:填写grpc传输的json数据