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++后,最初定义模板的方法为 ...
随机推荐
- NetStream 记录
bufferLength : Number [只读] 数据当前存在于缓冲区中的秒数.(已进入缓冲区的秒数) bufferTime : Number 指定在开始显示流之前需要多长时间将消息存入缓冲区.( ...
- qurtz.net(转载)
Quartz+TopShelf实现Windows服务作业调度 Quartz:首先我贴出来了两段代码(下方),可以看出,首先会根据配置文件(quartz.config),包装出一个Quartz.Co ...
- webpack+avalon+mmState打包方案
终于到讲授如何整合avalon社区这个最强大的组件,基于状态机的路由系统了! 基于状态机的路由系统,据我所知,目前世界上只有三款,angular社区的ui-router, 网易出品的stateman, ...
- WEB前端问题——img标签的onclick事件无法响应问题【转载】
一个纠结了一下午的问题,img标签里面的onclick事件无法响应.最终找到了错误原因,是因为img标签的id与onclick事件的方法名相同. 于是接着又测试了一下,发现name名和方法名相同也会导 ...
- 多线程 死锁 wait(int i) notifyAll()
public class ThreadDemo5 { public static void main(String[] args){ Pool pool = new Pool(); Productor ...
- 法门扫地僧总结vue面试题(部分来源网络)
Front-End 前端开发工程师面试宝典! (本文部分有转载,不定期更新!) 前言(README.md) 本仓库是我整理的前端常见面试题,大部分由我整理,其中个别部分参考 ...
- Android sdk 目录结构说明
1.add-on:附加的包:2.docs:HTML格式的离线文档:3.platforms:sdk核心内容:4.tool:工具. 在platforms中包含了的各个Android SDK版本的目录中,包 ...
- 吴裕雄 24-MySQL 索引
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度.打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一 ...
- mysql 模糊搜索
[mysql 模糊搜索] like,%,_,[],[^] 参考:http://www.jb51.net/article/31904.htm
- IN_ORDER_PLANNING、IN_BOM_CHANGE
一.IN_ORDER_PLANNING 新增一个IN表(IN_ORDER_PLANNING,把ZFP037和ZFP026整合成一张表,标示哪些订单的是真验货/假验货.VIP真验货/假验货订单) ORD ...