Golang模板中的字符串切片范围

Jet*_*mas 0 go go-templates

我有一个结构,其中包含一片像下面这样的字符串类型。

 type Data struct {
      DataFields []string
 }
Run Code Online (Sandbox Code Playgroud)

在我的html模板文件中,我希望覆盖字符串切片。但是,各个字段只是没有任何结构名称的字符串。如何遍历包含简单类型(例如字符串,整数等)的切片?

blo*_*don 19

或者将其分配给一个变量,类似于普通的 Go range 子句:

 {{range $element := .DataFields}} {{$element}} {{end}}
Run Code Online (Sandbox Code Playgroud)

在操场上运行它

来自文本/模板文档(用作 html/模板的界面文档):

{{范围管道}} T1 {{end}}
    管道的值必须是数组、切片、映射或通道。
    如果管道的值长度为零,则不输出任何内容;
    否则,将dot 设置为数组的连续元素,
    slice 或 map并执行 T1。如果值是地图并且
    键是具有定义顺序的基本类型(“可比较”),
    元素将按排序的键顺序访问。

...

动作内部的管道可以初始化一个变量来捕获结果。初始化有语法

$variable := pipeline

...

如果“范围”操作初始化了一个变量,则该变量将设置为迭代的连续元素。此外,“范围”可以声明两个变量,用逗号分隔:

range $index, $element := pipeline

在这种情况下, $index 和 $element 分别设置为数组/切片索引或映射键和元素的连续值。请注意,如果只有一个变量,则为其分配元素;这与 Go 范围子句中的约定相反。

(我强调的粗体部分)


Cer*_*món 7

.指一个简单的价值就像一个字符串,整数,等

 {{range .DataFields}}{{.}}{{end}}
Run Code Online (Sandbox Code Playgroud)

在Playground上运行它

您也可以像中一样为模板变量赋值{{range $v := .DataFields}}{{$v}}{{end}},但这是额外的工作。拥抱.

  • 就我个人而言,第二种语法“{{range $v := .DataFields}}{{$v}}{{end}}”为屏幕上更多字符的可读性提供了显着的好处。我会接受这个权衡! (4认同)