Golang向Templates 插入对象的值
Go对象可以插入到template中,然后把对象的值表现在template中,你可以一层层的分解这个对象,去找他的子字段,当前对象用'.'来表示,所以当当前对象是一个string的时候,你可以用{{.}}。这个包默认使用fmt包来把插入的对象转成string
插入某个对象字段的值,我们在字段名字前面加上一个'.'前缀就可以了,例如我们定义一个struct
type Person struct {Name stringAge intEmails []stringJobs []*Jobs
}
我们可以通过
The name is {{.Name}}.
The age is {{.Age}}.
来插入Person对象,Name和Age的值。
我们可以通过range来遍历一个数组或者其他列表,如果我们要遍历Person的Email对象,我们可以
{{range .Emails}}...
{{end}}
上面的Job是这么定义的
type Job struct {Employer stringRole string
}
我们想访问Person的job,我们可以通过{{range .Jobs}},通过 {{with ...}} ... {{end}} 可以把Jobs切换为当前对象,那么{{.}}就代表的是Jobs
{{with .Jobs}}{{range .}}An employer is {{.Employer}}and the role is {{.Role}}{{end}}
{{end}}
你可以用这个来处理任何字段,不仅仅是数据类型。说了这么多没用的,还是上代码吧,从代码就可以很清楚的看出tempalte的用法
package mainimport ("fmt""html/template""os"
)type Person struct {Name stringAge intEmails []stringJobs []*Job
}type Job struct {Employer stringRole string
}const templ = `The name is {{.Name}}.
The age is {{.Age}}.
{{range .Emails}}An email is {{.}}
{{end}}{{with .Jobs}}{{range .}}An employer is {{.Employer}}and the role is {{.Role}}{{end}}
{{end}}
`func main() {job1 := Job{Employer: "Monash", Role: "Honorary"}job2 := Job{Employer: "Box Hill", Role: "Head of HE"}person := Person{Name: "jan",Age: 50,Emails: []string{"jan@newmarch.name", "jan.newmarch@gmail.com"},Jobs: []*Job{&job1, &job2},}t := template.New("Person template")t, err := t.Parse(templ)checkError(err)err = t.Execute(os.Stdout, person)checkError(err)
}func checkError(err error) {if err != nil {fmt.Println("Fatal error ", err.Error())os.Exit(1)}
}
程序输出:
The name is jan.
The age is 50.An email is jan@newmarch.nameAn email is jan.newmarch@gmail.comAn employer is Monashand the role is HonoraryAn employer is Box Hilland the role is Head of HE
转载于:https://www.cnblogs.com/hupengcool/p/4135514.html
Golang向Templates 插入对象的值相关推荐
- 从头认识Spring-1.7 如何通过属性注入Bean?(1)-如何通过属性向对象注入值?...
这一章节我们来讨论一下如何通过属性注入Bean? 这一章节分为两部分,第一部分我们通过属性向对象注入值,第二部分我们通过属性向对象注入还有一个对象的引用. 1.如何通过属性向对象注入值? (1)dom ...
- 直接修改html文本页面没变化,VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析...
本文实例讲述了VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法.分享给大家供大家参考,具体如下: 业务场景 我们在使用vue 编写 代码时,我们有一个 多行文本框控件,希望在页面 ...
- 数据库插入时,标识列插入显式值
当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'CU_GiftExchange' 中的标识列插入显式值. SET IDENTITY_INSERT [dbo].[CU_GiftExc ...
- JavaScript强化教程——对象的值传递和引用传递
2019独角兽企业重金招聘Python工程师标准>>> 本文为 H5EDU 机构官方 HTML5培训 教程,主要介绍:JavaScript强化教程--对象的值传递和引用传递 func ...
- 【 C 】简化双链表插入函数(对在双链表中插入一个新值的简明程序的简化)
目录 背景 第一个技巧是语句提炼(statement factoring) 第二个简化技巧 最终简化版本 背景 上篇博文:[ C ]在双链表中插入一个新值的简明程序,讲了一个简明的双链表插入函数,那个 ...
- 【 C 】在双链表中插入一个新值的简明程序
上两篇博文讲了如何在单链表中插入一个值: [ C ]在单链表中插入一个新节点的尝试(一) [ C ]在单链表中插入一个新节点的尝试(二) 这篇博文讲解如何在双链表中插入一个值. 单链表的替代方案就是双 ...
- java 不可修改的集合对象_java集合:关于hashmap存储一个对象,中间改变对象的值,为什么再remove不能用新名字来删除...
代码如下:publicclassDemo1{publicstaticvoidmain(String[]args){HashSetsc=newHashSet<>();bookbook1=ne ...
- 数据结构之堆的插入、取值、排序(细致讲解+图片演示)
数据结构之堆(Heap):插入.取值.排序. 堆是一种数据结构,分为最小堆和最大堆,可以用二叉树来表示. 在二叉树的任意的一个三角结构中(一个父节点,两个子节点),需要满足以下两个条件: 1.父节点要 ...
- SQL Server中如何取得刚插入的标识值
数据库实际应用中,我们往往需要得到刚刚插入 的标志值来往相关表中写入数据.但我们平常得到的真的是我们需要的那个值么? 有时我们会使用 SELECT @@Identity 来获得我们刚刚插入的值,比如下 ...
最新文章
- iOS 用自签名证书实现 HTTPS 请求的原理实例讲解
- TIOBE 5 月编程语言排行榜:Python、C++竞争白热化,Objective-C已沦为小众语言
- java 分页组件_java 代码组装的分页组件
- 腾讯云【人脸识别】服务的一次尝试(JAVA)
- 第7章 C控制语句:分支和跳转
- 在Nginx中支持HTTP3.0/QUIC
- linux成为管理员_成为系统管理员需要知道的
- 机器学习 -- 用户画像
- python flask api 统计_python之restful api(flask)获取数据
- 超英文邮件50%!Flink 中文邮件列表必须有姓名
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_08 转换流_4_OutputStreamWriter介绍代码实现...
- 无法修改计算机时间权限,Win10无法修改时间怎么办?Win10修改系统时间没有权限的解决方法...
- A到Z的unicode的编码的大小
- RQ940服务器显示器不亮,稳定可靠 联想ThinkServer RQ940服务器
- libcurl 使用说明和网页抓取 linux下的curl编程
- 装X指南之用 Xposed 把某宝资产改成100w
- 电子钱包电子存折,区别
- docker以及docker-compose 使用加速器部署
- VUE 移动端自适应布局终极解决方案
- 教程:如何下载坦克世界