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. 数据加密之MD5加密
  2. 全国哀悼日,怎么让网站变灰色???
  3. python npy文件_python实现npy格式文件转换为txt文件操作
  4. MySQL常用SQL语句(CURD,建表,加字段,查改参数)
  5. 用子函数实现strlen.strcpy.strcat.strcmp(完整代码)
  6. 674. zui长连续递增序列(JavaScript)
  7. cloud_config学习_1
  8. 20145307《信息安全系统设计基础》第二周学习总结
  9. 基于Gsoap 的ONVIF C++ 库
  10. ulli中自定义属性后取值的问题
  11. 关于页面导航和数据传递的简单总结
  12. sql不同数据处理方式完成同一处理结果对日志增长的影响
  13. 网易云音乐ncm格式转换为mp3
  14. dell r620 升级idrac_DELL R630 如何利用IDRAC升级BIOS固件和IDARC
  15. 【问题描述】打印2018年的日历
  16. 前端高效开发必备的js库梳理,日常使用中会持续更新
  17. 第一章 Python初探
  18. 拨测技术在哪些方面应用比较广泛?
  19. VB.net 移动文件夹去另一个地址,删除文件夹里某种类型的文件
  20. 上海亚商投顾:创业板指高开高走 ChatGPT概念卷土重来

热门文章

  1. 关于ASP无组件上传在2003下出错
  2. 行将消失的烧瓦匠人:“仿古”热潮下迎新生曙光
  3. flannel 的连通与隔离 - 每天5分钟玩转 Docker 容器技术(61)
  4. 【物联网智能网关-15】WAV播放器(WinForm+WavPlay库实例)
  5. 如何做好网站项目需求分析?
  6. 清除Solution中的vss信息
  7. BCH或将在年底超越ETH
  8. 滴滴开源支撑业务代码重构工具Rdebug
  9. Laravel 配置项即时载入的服务提供者
  10. JavaScript之充实文档的内容