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 插入对象的值相关推荐

  1. 从头认识Spring-1.7 如何通过属性注入Bean?(1)-如何通过属性向对象注入值?...

    这一章节我们来讨论一下如何通过属性注入Bean? 这一章节分为两部分,第一部分我们通过属性向对象注入值,第二部分我们通过属性向对象注入还有一个对象的引用. 1.如何通过属性向对象注入值? (1)dom ...

  2. 直接修改html文本页面没变化,VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析...

    本文实例讲述了VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法.分享给大家供大家参考,具体如下: 业务场景 我们在使用vue 编写 代码时,我们有一个 多行文本框控件,希望在页面 ...

  3. 数据库插入时,标识列插入显式值

    当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'CU_GiftExchange' 中的标识列插入显式值. SET IDENTITY_INSERT [dbo].[CU_GiftExc ...

  4. JavaScript强化教程——对象的值传递和引用传递

    2019独角兽企业重金招聘Python工程师标准>>> 本文为 H5EDU 机构官方 HTML5培训 教程,主要介绍:JavaScript强化教程--对象的值传递和引用传递 func ...

  5. 【 C 】简化双链表插入函数(对在双链表中插入一个新值的简明程序的简化)

    目录 背景 第一个技巧是语句提炼(statement factoring) 第二个简化技巧 最终简化版本 背景 上篇博文:[ C ]在双链表中插入一个新值的简明程序,讲了一个简明的双链表插入函数,那个 ...

  6. 【 C 】在双链表中插入一个新值的简明程序

    上两篇博文讲了如何在单链表中插入一个值: [ C ]在单链表中插入一个新节点的尝试(一) [ C ]在单链表中插入一个新节点的尝试(二) 这篇博文讲解如何在双链表中插入一个值. 单链表的替代方案就是双 ...

  7. java 不可修改的集合对象_java集合:关于hashmap存储一个对象,中间改变对象的值,为什么再remove不能用新名字来删除...

    代码如下:publicclassDemo1{publicstaticvoidmain(String[]args){HashSetsc=newHashSet<>();bookbook1=ne ...

  8. 数据结构之堆的插入、取值、排序(细致讲解+图片演示)

    数据结构之堆(Heap):插入.取值.排序. 堆是一种数据结构,分为最小堆和最大堆,可以用二叉树来表示. 在二叉树的任意的一个三角结构中(一个父节点,两个子节点),需要满足以下两个条件: 1.父节点要 ...

  9. SQL Server中如何取得刚插入的标识值

    数据库实际应用中,我们往往需要得到刚刚插入 的标志值来往相关表中写入数据.但我们平常得到的真的是我们需要的那个值么? 有时我们会使用 SELECT @@Identity 来获得我们刚刚插入的值,比如下 ...

最新文章

  1. iOS 用自签名证书实现 HTTPS 请求的原理实例讲解
  2. TIOBE 5 月编程语言排行榜:Python、C++竞争白热化,Objective-C已沦为小众语言
  3. java 分页组件_java 代码组装的分页组件
  4. 腾讯云【人脸识别】服务的一次尝试(JAVA)
  5. 第7章 C控制语句:分支和跳转
  6. 在Nginx中支持HTTP3.0/QUIC
  7. linux成为管理员_成为系统管理员需要知道的
  8. 机器学习 -- 用户画像
  9. python flask api 统计_python之restful api(flask)获取数据
  10. 超英文邮件50%!Flink 中文邮件列表必须有姓名
  11. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_08 转换流_4_OutputStreamWriter介绍代码实现...
  12. 无法修改计算机时间权限,Win10无法修改时间怎么办?Win10修改系统时间没有权限的解决方法...
  13. A到Z的unicode的编码的大小
  14. RQ940服务器显示器不亮,稳定可靠 联想ThinkServer RQ940服务器
  15. libcurl 使用说明和网页抓取 linux下的curl编程
  16. 装X指南之用 Xposed 把某宝资产改成100w
  17. 电子钱包电子存折,区别
  18. docker以及docker-compose 使用加速器部署
  19. VUE 移动端自适应布局终极解决方案
  20. 教程:如何下载坦克世界

热门文章

  1. 在隐私的博弈时代,BCH为你保驾护航
  2. 1-4月份我国软件业务收入15753亿元 同比增长13.1%
  3. 自由是有代价的:聊聊这几年尝试的道路
  4. BCH粉必转 | 围绕BCH建立的相关项目和应用列表汇总
  5. SegWit与BCH交易量及投资者流量更新
  6. kubernetes 配置kubedns
  7. 【mysql】Mac下安装mysql5.7 完整步骤,大坑已解决
  8. String的那一大堆事儿--1
  9. 【大前端之前后分离01】JS前端渲染VS服务器端渲染
  10. getGeneratedKeys自动获取主键的方法