go语言template包中模板语法总结
package main; import (
"html/template"
"os"
"fmt"
) type Person struct {
Id string;
UserName string;
Age int;
Contact map[string]string;
} func (p Person) Say(msg string) string {
return msg;
} func test1() string {
return "test1";
} func test2(msg string) string {
return msg + "test2";
} func test3(a int) bool {
if a == 3 {
return true;
}
return false;
} func sum() func(nums ...int) (int, error) {
return func(nums ...int) (int, error) {
sum := 0;
for _, v := range nums {
sum += v;
}
return sum, nil;
};
} func main() {
//创建一个模板
t := template.New("test");
//注释
t, _ = t.Parse(`{{/*我是注释*/}}`);
t.Execute(os.Stdout, nil); //输出单个字符串
t2 := template.New("test");
// {{.}}输出当前对象的值
t2, _ = t2.Parse(`{{.}}`);
p := "test";
//输出字符串
t2.Execute(os.Stdout, p);
fmt.Println(); //输出结构中字段的值
t3 := template.New("test");
// {{.字段名}}输出对象中字段的值
//注意字段是可导出的,首字母大写
t3, _ = t3.Parse(`{{.Id}} {{.UserName}} {{.Age}}`);
t3.Execute(os.Stdout, Person{"001", "test", 11, nil});
fmt.Println(); //调用结构的方法
t4 := template.New("test");
// {{.方法 参数1 参数2}}
//参数依次传入方法,输出返回值
t4, _ = t4.Parse(`{{.Say "hello"}}`);
t4.Execute(os.Stdout, Person{"002", "test2", 22, nil});
fmt.Println(); //模板中定义变量
t5 := template.New("test");
// {{$变量名}} 输出模板中定义的变量
t5, _ = t5.Parse(`{{$a := "模板中定义的变量"}} {{$a}}`);
t5.Execute(os.Stdout, nil);
fmt.Println(); //模板函数
t6 := template.New("test");
//注册模板函数
t6.Funcs(template.FuncMap{"test1": test1});
t6.Funcs(template.FuncMap{"test2": test2});
// {{函数名}}输出函数返回值
// {{函数名 参数1 参数2}}
// {{.字段名|函数名}} 以字段的值作为函数的参数
t6, _ = t6.Parse(`
{{test1}}
{{test2 "参数"}}
{{.UserName|test2}}
`);
t6.Execute(os.Stdout, Person{"003", "test3", 33, nil});
fmt.Println(); //条件判断
t7 := template.New("test");
t7.Funcs(template.FuncMap{"test3": test3});
// {{if 表达式}}{{else if}}{{else}}{{end}}
// if后面可以是一个条件表达式,可以是字符串或布尔值变量
// 注意if后面不能直接使用==来判断
t7, _ = t7.Parse(`
{{if 1}}
为真
{{else}}
为假
{{end}} {{$a := 4}}
{{if $a|test3}}
$a=3
{{else}}
$a!=3
{{end}}
`);
t7.Execute(os.Stdout, nil);
fmt.Println(); //遍历
t8 := template.New("test");
// {{range 键,值 := 变量}}{{end}} 遍历对象
// {{with 变量}}{{end}} 指定当前操作的对象
t8, _ = t8.Parse(`
{{range $k, $v := .Contact}}
{{$k}} {{$v}}
{{end}} {{with .Contact}}
{{range $k, $v := .}}
{{$k}} {{$v}}
{{end}}
{{end}}
`);
con := make(map[string]string);
con["qq"] = "123456";
con["tel"] = "13888888888";
t8.Execute(os.Stdout, Person{Contact: con});
fmt.Println(); //嵌套模板
t9 := template.New("test");
t9.Funcs(template.FuncMap{"test1": test1});
// {{define "模板名"}}模板内容{{end}} 定义模板
// {{template "模板名"}} 引入模板
// {{template "模板名" 函数}} 将函数中的值赋给模板中的{{.}}
t9, _ = t9.Parse(`
{{define "tp1"}} 我是模板1 {{end}}
{{define "tp2"}} 我是模板2 {{.}} {{end}}
{{define "tp3"}} {{template "tp1"}} {{template "tp2"}} {{end}}
{{template "tp1"}}
{{template "tp2" test1}}
{{template "tp3" test1}}
`);
t9.Execute(os.Stdout, nil);
fmt.Println(); //内置的模板函数
t10 := template.New("test");
t10.Funcs(template.FuncMap{"sum": sum});
t10, _ = t10.Parse(`
/*如果3为真,返回4,否则返回3*/
{{and 3 4}} /*call后第一个参数的返回值必须是一个函数*/
{{call sum 1 3 5 7}} /*转义文本中的html标签*/
{{"<br>"|html}} /*返回Contact索引为qq的值*/
{{index .Contact "qq"}} /*返回用js的escape处理后的文本*/
{{"?a=123&b=你好"|js}} /*返回参数的长度值*/
{{"hello"|len}} /*返回单一参数的布尔否定值*/
{{not 0}} /*如果3为真,返回3,否则返回4*/
{{or 3 4}} /*fmt.Sprint的别名*/
{{"你好"|print "世界"}} /*fmt.Sprintf的别名*
{{"你好"|printf "%d %s" 123}} /*fmt.Sprintln的别名*/
{{"你好"|println "世界"}} /*url中get参数转义*/
{{"?q=关键字&p=1"|urlquery}} /*等于*/
{{if eq 1 1}}
1=1
{{end}} /*不等于*/
{{if ne 1 1}}
1!=1
{{end}} /*小于*/
{{if lt 3 1}}
3<1
{{end}} /*小于等于*/
{{if le 3 3}}
3<=3
{{end}} /*大于*/
{{if gt 3 1}}
3>1
{{end}} /*大于等于*/
{{if ge 3 3}}
3>=3
{{end}}
`);
con2 := make(map[string]string);
con2["qq"] = "123456";
con2["tel"] = "13888888888";
t10.Execute(os.Stdout, Person{Contact: con2});
}
go语言template包中模板语法总结的更多相关文章
- go语言的模板,text/template包
go语言的模板,text/template包 定义 模板就是将一组文本嵌入另一组文本里 传入string--最简单的替换 package main import ( "os" &q ...
- 4 Template层 -定义模板
1.模板介绍 作为Web框架,Django提供了模板,可以很便利的动态生成HTML 模版系统致力于表达外观,而不是程序逻辑 模板的设计实现了业务逻辑(view)与显示内容(template)的分离,一 ...
- R语言-神经网络包RSNNS
code{white-space: pre;} pre:not([class]) { background-color: white; }if (window.hljs && docu ...
- Flask视图函数与模板语法
1.Django中的CBV模式 2.Flask中的CBV和FBV def auth(func): def inner(*args, **kwargs): result = ...
- Django——模板层(template)(模板语法、自定义模板过滤器及标签、模板继承)
前言:当我们想在页面上给客户端返回一个当前时间,一些初学者可能会很自然的想到用占位符,字符串拼接来达到我们想要的效果,但是这样做会有一个问题,HTML被直接硬编码在 Python代码之中. 1 2 3 ...
- golang 模板(template)的常用基本语法
1. 模板 在写动态页面的网站的时候,我们常常将不变的部分提出成为模板,可变部分通过后端程序的渲染来生成动态网页,golang提供了html/template包来支持模板渲染. 这篇文章不讨论gola ...
- ES6, Angular,React和ABAP中的String Template(字符串模板)
String Template(字符串模板)在很多编程语言和框架中都支持,是一个很有用的特性.本文将Jerry工作中使用到的String Template的特性做一个总结. ES6 阮一峰老师有一个专 ...
- C++中 模板Template的使用
1.在c++Template中很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢?答:class用于定义类,在模板引入c++后,最初定义模板的方法 ...
- C++中模板Template的使用
1. 在c++Template中很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢?class用于定义类,在模板引入c++后,最初定义模板的方法为 ...
随机推荐
- 今天折腾phantomjs+selenium的笔记
1.debian8里安装phantomjs的方法: 参照:http://www.cnblogs.com/lgh344902118/p/6369054.html a.去https://bitbucket ...
- npm run dev 报错:missing script:dev
一.问题: 今天在运行vue项目时,在mac终端输入npm run dev,结果报错: 翻译是: npm错误:缺少script:dev npm错误:完整路径见:users/mymac/ .npm/_l ...
- 18. socket io
类似dataservice 我们socket io 和后端交互 我们也可以做成专门的service 我们先引入 为什么不是cdn呢? 因为client就是从我们的server端拿到的socket.io ...
- 吴裕雄 24-MySQL 索引
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度.打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一 ...
- tensorflow pip install 安装指定版本的包并指定安装源(速度会快很多)
pip install tensorflow-gpu==1.3 pip install tensorflow-gpu==1.4 # pip install 命令行pip install -i http ...
- Python gevent
1\协程 import geventfrom gevent import monkeyimport requestsfrom bs4 import BeautifulSoupimport thread ...
- numpy 矩阵变换 reshape ravel flatten
1. 两者的区别在于返回拷贝(copy)还是返回视图(view),numpy.flatten()返回一份拷贝,对拷贝所做的修改不会影响(reflects)原始矩阵,而numpy.ravel()返回的是 ...
- biopython
转载Part 2 Biopython的重头戏-生物学中序列的处理 Biopyhton的Seq和Python中标准字符串有两大重要的不同之处:首先,他们的处理方法不同.Seq适用于很多不同字符串的用的 ...
- c# 项目的导入
1.打开 2.手动添加现有项目,对照后找到未添加的空间,然后打开底层 选择 “#”文件打开即可 3.每个空间分别添加隐藏项 注意 bin与obj不需要添加 4.添加引用 5.可能需要删除 li ...
- jdk1.8的项目在jdk1.7的环境下运行