Go Template学习笔记
时间:2022-05-04
本文章向大家介绍Go Template学习笔记,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
快速开始
func handler(w http.ResponseWriter,r *http.Request){
t := template.New("new template") //创建一个模板
t,err := t.ParseFile("tpl/welcome.html",nil) //解析模板文件
if err != nil{ panic(err.Error())
}
user := GetUser() //获取用户信息
t.Execute(w,user) //执行模板,并通过w输出
}
各种模板 {{.}} 表示当前对象,如user对象 {{.FieldName}} 表示对象的某个字段 {{range …}}{{end}} go中for…range语法类似,循环 {{with …}}{{end}} 当前对象的值,上下文
//一个模板文件例子
hello {{.UserName}}!
{{range .Emails}}
an email {{.}}
{{end}}
{{with .Friends}}
{{range .}}
my friend name is {{.Fname}}
{{end}}
{{end}}
{{if …}}{{else}}{{end}} go中的if-else语法类似,条件选择
//if 后只能出现bool值,不支持bool表达式
if-else demo:
{{if .ShowFlag}}
section if {{else}}
section else.
{{end}}
pipeline 左边的输出作为右边的输入
//当前对象作为参数,传入内置函数html中
{{. | html}}
模板变量 模板使用过程中定义局部变量
{{with $x := "output"}}{{$x}}{{end}}
{{with $x := "output"}}{{$x | printf "%s"}}{{end}}
输出
outputoutput
模板函数 支持的函数类型
func(args ...interface{})string
函数定义例子
func Say(args ...interface{})string{
return fmt.Sprintf("%s %v","Hello",args[0])
}
注册函数
t = t.Funcs(template.FuncMap{"Say":Say})
模板定义
{{Say `Func`}}
{{`Pipe` | Say}}
输出:
Hello FuncHello Pipe
template中内置函数
var builtins = FuncMap{
"and": and,
"call": call,
"html": HTMLEscaper,
"index": index,
"js": JSEscaper,
"len": length,
"not": not,
"or": or,
"print": fmt.Sprint,
"printf": fmt.Sprintf,
"println": fmt.Sprintln,
"urlquery": URLQueryEscaper,
}
Must操作 检测模板是否正确:大括号是否匹配,注释是否正确关闭,变量是否正确
tOk := template.New("first")
template.Must(tOk.Parse(" some static text /* and a comment */"))
fmt.Println("The first one parsed OK.")
template.Must(template.New("second").Parse("some static text {{ .Name }}"))
fmt.Println("The second one parsed OK.")
fmt.Println("The next one ought to fail.")
tErr := template.New("check parse error with Must")
template.Must(tErr.Parse(" some static text {{ .Name }"))
输出:
The first one parsed OK.
The second one parsed OK.
The next one ought to fail.
panic: template: check parse error with Must:1: unexpected "}" in command
模板嵌套 将模板模块化,如在web开发中定义header,content,footer三个子模块
//声明
{{define "module_name"}}content{{end}}
//调用
{{template "module_name"}}
以下定义三个文件:
- header.html
{{define "header"}}
<html>
<head>
<title>演示信息</title>
</head>
<body>
{{end}}
footer.tmpl
{{define "footer"}}
</body>
</html>
{{end}}
content.tmpl
{{define "content"}}
{{template "header"}}
<h1>演示嵌套</h1>
<ul>
<li>嵌套使用define定义子模板</li>
<li>调用使用template</li>
</ul>
{{template "footer"}}
{{end}}
go代码 ParseFiles:所有嵌套的模板全部解析到模板中
s1,_ := template.ParseFiles("header.tmpl","content.tmpl","footer.tmpl")
s1.ExecuteTemplate(w, "header",nil)
s1.ExecuteTemplate(w, "footer", nil)
s1.ExecuteTemplate(w, "content", nil)
- Cobbler自动化批量安装linux服务器的操作记录
- Twemproxy——针对MemCached与Redis的代理
- 谁适合学Python?学了Python可以做什么工作?
- webservice今日遇到的二个问题:DataTable + Namespace
- php安全配置记录和常见错误梳理
- Flex:地图缩放平移效果(简易版)
- Mongodb副本集+分片集群环境部署记录
- 线上mongodb 数据库用户到期时间修改的操作记录
- 微信小程序“授权失败”场景的处理
- 动软.net代码生成器 win2008 r2下无法连接oracle,以及vs2008模板丢失的解决
- ASP.NET Web API 支持 CORS
- oracle odp.net 32位/64位版本的问题
- Redis+TwemProxy(nutcracker)集群方案部署记录
- 金融科技新常态,未来开启拼“硬实力”阶段
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- pthread_join函数
- 快速学习-Sleuth--链路追踪
- pthread_cancel函数
- SAP WebClient UI开发工具中attribute文件夹展开的实现原理分析
- pthread_attr_init线程属性
- C语言可重入函数和不可重入函数
- 在SAP WebClient UI里显示倒数计时的UI
- 如何使用jMeter测试SAP OData服务并发访问时的性能
- 如何使用SAP HANA Studio的PlanViz分析CDS view性能问题
- 使用SAP C4C自定义BO association创建动态下拉列表
- 使用Express+TypeScript编写后台服务
- WPF 点击按钮时更改按钮样式界面效果的 XAML 实现方法
- ASP.NET Core 警惕可空类型开启之后模型校验失败
- os.path.abspath()的作用
- 机器学习-Coursera笔记