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++后,最初定义模板的方法为 ...
随机推荐
- SQL--结构化的查询语言
SQL--结构化的查询语言T-SQL:Transact-SQL (SQL的增强版) 逻辑运算符 and && or || not ! 关系运算符 等于 = 不等于<>或!= ...
- C++ vc中怎么使用SendMessage自定义消息函数
vc中怎么使用SendMessage自定义消息函数: SendMessage的基本结构如下:SendMessage( HWND hWnd, //消息传递的目标窗口或线程的句柄. UINT ...
- unity3d assetbundle打包策略
由于assetbundle打包存在依赖的问题,所有资源要进行合理的分包 零.代码 代码都放在本地,包括NGUI等插件的代码.shader代码(内置的shader无需打包,而自定义的shader还是需要 ...
- idea git 从github上拉取项目 更改上传
更改上传: 新增文件上传时注意:
- Docker虚拟化平台
1.虚拟化技术的概念 1)虚拟化就是把物理资源转变为逻辑上可以管理的资源,以打破物理结构间的壁垒,让计算机的元件运行在虚拟的基础上,而不是真实的物理设备: 2)虚拟化技术可以将物理机硬件资源虚拟生成单 ...
- 抢红包js程序
https://www.cnblogs.com/miid/p/5192235.html <!DOCTYPE html> <html> <head> <meta ...
- CSS样式表的写作规范
推荐大家使用的CSS书写规范.顺序 写了这么久的CSS,但自己都没有按照良好的CSS书写规范来写CSS代码,东写一段西写一段,命名也是想到什么写什么,过一段时间自己都不知道写的是那一块内容, 这样会影 ...
- python+爬虫+签名
在公众号,看到一个比较好玩的程序.它使用post的来传送请求,以前没有遇到过.可能是自己,写的程序太少了.查了一下post的用法: 通常,你想要发送一些编码为表单形式的数据——非常像一个 HTML 表 ...
- web.xml中<security-constraint>和四种认证类型
https://blog.csdn.net/lisheng19870305/article/details/40819481 sztc开发中http请求一直发送后无响应,通过soapui定位异常信息为 ...
- Spring 学习笔记
Spring 的 Ioc 容器 所有的组件都是被动的( Passive),所有的组件初始化和调用都由容器负责.组件处在一个容器当中,由容器负责管理. BeanFactory 根据配置文 ...