【发布时间】:2019-06-06 22:36:55
【问题描述】:
我有一个结构,它包含一个字符串类型的切片,如下所示。
type Data struct {
DataFields []string
}
在我的 html 模板文件中,我想覆盖字符串切片。但是,各个字段只是没有任何结构名称的字符串。如何遍历包含简单类型(如字符串、int 等)的切片?
【问题讨论】:
标签: go go-templates
我有一个结构,它包含一个字符串类型的切片,如下所示。
type Data struct {
DataFields []string
}
在我的 html 模板文件中,我想覆盖字符串切片。但是,各个字段只是没有任何结构名称的字符串。如何遍历包含简单类型(如字符串、int 等)的切片?
【问题讨论】:
标签: go go-templates
使用. 来引用字符串、int 等简单值。
{{range .DataFields}}{{.}}{{end}}
您也可以像{{range $v := .DataFields}}{{$v}}{{end}} 那样分配给模板变量,但这是额外的工作。拥抱.。
【讨论】:
{{range $v := .DataFields}}{{$v}}{{end}} 为屏幕上更多字符的可读性提供了显着优势。我会权衡取舍!
或者将其赋值给一个变量,类似于普通的 Go 范围子句:
{{range $element := .DataFields}} {{$element}} {{end}}
来自docs for text/template(用作html/模板的接口文档):
{{range pipeline}} T1 {{end}} 管道的值必须是数组、切片、映射或通道。 如果管道的值长度为零,则不输出任何内容; 否则, dot 被设置为数组的连续元素, 切片或映射 并执行 T1。如果值是地图并且 键是具有定义顺序的基本类型(“可比较”), 元素将按排序键顺序访问。...
动作中的管道可能会初始化一个变量来捕获结果。初始化有语法
$variable := pipeline...
如果一个“范围”动作初始化一个变量,该变量被设置为迭代的连续元素。此外,“范围”可以声明两个变量,用逗号分隔:
range $index, $element := pipeline在这种情况下,$index 和 $element 分别设置为数组/切片索引或映射键和元素的连续值。 注意,如果只有一个变量,则赋值为元素;这与 Go range 子句中的约定相反。
(我强调的粗体部分)
【讨论】: