如何在go模板中移动切片?
How to shift slice in go template?
我正在使用 confd 通过模板填充文件。
在此文件中,我想要移动和插入元素列表。
此切片包含类似
的字符串
0=container-1
1=container-2
2=container-3
3=container-4
(其实就是我用split
confd函数拆分出来的字符串)。
我希望,在每个容器上,能够过滤掉容器名称并将列表移动到让我的容器首先出现的容器。
例如,在 container-2
上,我希望得到
2=container-3
3=container-4
0=container-1
如何在 confd go 模板中做到这一点?我想我知道如何在 go 中做到这一点(但我不太擅长那种特定的语言),但我找不到如何仅使用模板来做到这一点...
如果您无法在模板外操作 slice/string,并且您也无法向模板添加自定义函数,则您必须在模板内执行此操作。它更冗长,但可行。
一种方法是将两个循环嵌套在一个父循环中。父级将查找您要遗漏的容器,此时它将生成两个子循环,其中 $i
保存要遗漏的容器的索引。然后第一个子循环可以列出索引大于 $i
的容器,第二个子循环将列出索引小于 $i
.
的容器
{{range $i, $c := $cons}}
{{/* find item to be skipped */}}
{{if (eq $c $.Skip)}}
{{range $j, $c := $cons}}
{{/* list items that come after the one to be skipped */}}
{{if (gt $j $i)}}
{{$c}}
{{end}}
{{end}}
{{range $j, $c := $cons}}
{{/* list items that come before the one to be skipped */}}
{{if (lt $j $i)}}
{{$c}}
{{end}}
{{end}}
{{end}}
{{end}}
我正在使用 confd 通过模板填充文件。
在此文件中,我想要移动和插入元素列表。 此切片包含类似
的字符串0=container-1
1=container-2
2=container-3
3=container-4
(其实就是我用split
confd函数拆分出来的字符串)。
我希望,在每个容器上,能够过滤掉容器名称并将列表移动到让我的容器首先出现的容器。
例如,在 container-2
上,我希望得到
2=container-3
3=container-4
0=container-1
如何在 confd go 模板中做到这一点?我想我知道如何在 go 中做到这一点(但我不太擅长那种特定的语言),但我找不到如何仅使用模板来做到这一点...
如果您无法在模板外操作 slice/string,并且您也无法向模板添加自定义函数,则您必须在模板内执行此操作。它更冗长,但可行。
一种方法是将两个循环嵌套在一个父循环中。父级将查找您要遗漏的容器,此时它将生成两个子循环,其中 $i
保存要遗漏的容器的索引。然后第一个子循环可以列出索引大于 $i
的容器,第二个子循环将列出索引小于 $i
.
{{range $i, $c := $cons}}
{{/* find item to be skipped */}}
{{if (eq $c $.Skip)}}
{{range $j, $c := $cons}}
{{/* list items that come after the one to be skipped */}}
{{if (gt $j $i)}}
{{$c}}
{{end}}
{{end}}
{{range $j, $c := $cons}}
{{/* list items that come before the one to be skipped */}}
{{if (lt $j $i)}}
{{$c}}
{{end}}
{{end}}
{{end}}
{{end}}