Golang 模板(text/template) (二)详解

举报
Linux猿 发表于 2021/12/15 22:57:13 2021/12/15
【摘要】 CSDN博客专家🏆,华为云享专家🏆,数据结构和算法、C/C++、面试、刷题、Linux尽管咨询我,关注我,有问题私聊!  欢迎小伙伴们点赞👍、收藏⭐、留言💬

🎈 作者: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] golang模板(text/template)_无风的雨-CSDN博客_golang 模板

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


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

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


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。