Golang 模板(text/template) (二)

本篇文章讲解下模板更深入的一些用法,比如:条件语句、函数、循环语句等。

一、条件语句

条件语句通常的语法格式如下:

{{ if pipeline }} expression0 {{ end }}
{{ if pipeline }} expression0 {{ else }} expression1  {{ end }}
{{ if pipeline }} expression0 {{ else if pipeline }} expression1 {{ end }}

当然,还可以使用更复杂的嵌套形式。 其中,pipeline 中的判断语法有如下几种:

eq,ne,lt ,le,gt,ge ,看下面的例子:

import (
	"os"
	"text/template"
)

type student struct {
	Name string
	Like string
}

func main() {

	Joy := student{"Joy", "Ping pong"}
	strTemplate := "My name is  {{.Name}} and I like to play {{if eq .Like `Ping pong`}}{{.Like}}{{else}}Basketball{{end}}!\n" // (1)定义模板-固定不变
	templ, err := template.New("templateOne").Parse(strTemplate)                                                               // (2)解析模板
	if err != nil {
		panic(err)
	}
	err = templ.Execute(os.Stdout, Joy) //(3)数据驱动模板,将name的值填充到模板中
	if err != nil {
		panic(err)
	}
}

 输出为:

My name is  Joy and I like to play Ping pong!

在例子中,if 语句根据判断.Like的值与“Ping Pong”的结构执行,逻辑和普通的 if / else 语句相同,只是判断方式不同。

二、循环语句

循环语句的语法格式如下:

{{ range pipeline }} expression {{ end }}

pipeline 需要是数组、切片、字典和通道中的一种,即可迭代类型的值,看下面的例子: 

import (
	"os"
	"text/template"
)

type student struct {
	Name string
	Like string
}

func main() {

	var students []student
	students = append(students, student{"Joy", "Ping pong"})
	students = append(students, student{"Bob", "Basketball"})
	strTemplate := "{{range .}}My name is  {{.Name}} and I like to play {{.Like}}!\n{{end}}" // (1)定义模板-固定不变
	templ, err := template.New("templateOne").Parse(strTemplate)                             // (2)解析模板
	if err != nil {
		panic(err)
	}
	err = templ.Execute(os.Stdout, students) //(3)数据驱动模板,将name的值填充到模板中
	if err != nil {
		panic(err)
	}
}

输出为:

My name is  Joy and I like to play Ping pong!
My name is  Bob and I like to play Basketball!

三、函数

模板中调用函数的模板如下:

{{functionName [Argument...]}}

参数可以是零个或多个,看下面的例子: 

import (
	"os"
	"text/template"
)

type student struct {
	Name string
	Like string
}

// Judge 判断
func Judge(like string) string {
	if like == "Ping pong" {
		return "Basketball"
	}
	return like
}

func main() {
	Joy := student{"Joy", "Ping pong"}
	strTemplate := "My name is  {{.Name}} and I like to play {{Judge .Like}}!\n"                         // (1)定义模板-固定不变
	templ, err := template.New("templateName").Funcs(template.FuncMap{"Judge": Judge}).Parse(strTemplate) // (2)解析模板
	if err != nil {
		panic(err)
	}
	err = templ.Execute(os.Stdout, Joy) //(3)数据驱动模板,将name的值填充到模板中
	if err != nil {
		panic(err)
	}
}

输出为:

My name is  Joy and I like to play Basketball!

四、其它常用语法

4.1 裁剪空格

可以将 “-” 放在输出内容的前后来去掉空格;

{{- content -}} :消除 content 前后的空格;
{{- content }}  :消除 content 前的空格;
{{ content -}}  :消除 content 后的空格;

4.2 注释

{{/*comment*/}} :注释

4.3 调用模板

{{template "name"}} : 执行名称为 name 的模板,不传递数据;
{{template "name" pipeline}} :执行名称为 name 的模板,传递 pipeline 产生的值;

五、参考链接

[1] https://golang.org/pkg/text/template/#pkg-overview

[2] https://blog.csdn.net/guyan0319/article/details/89083721

[3] https://www.cnblogs.com/zhaohaiyu/articles/11617516.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值