🎈 作者:Linux猿

🎈 简介:CSDN博客专家🏆,华为云享专家🏆,数据结构和算法、C/C++、面试、刷题、Linux尽管咨询我,关注我,有问题私聊!

🎈 关注专栏: 动图讲解数据结构和算法 (优质好文持续更新中……)🚀

🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬


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

一、条件语句

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

{{ 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


CSDN博客专家🏆,华为云享专家🏆,数据结构和算法、C/C++、面试、刷题、Linux尽管咨询我,关注我,有问题私聊!

欢迎小伙伴们点赞👍、收藏⭐、留言💬