String 如何在go模板中移动切片?
我正在使用通过模板填充文件 在这个文件中,我希望有一个元素列表被移位和插入。 这个片段包含如下字符串String 如何在go模板中移动切片?,string,go,slice,go-templates,confd,String,Go,Slice,Go Templates,Confd,我正在使用通过模板填充文件 在这个文件中,我希望有一个元素列表被移位和插入。 这个片段包含如下字符串 0=container-1 1=container-2 2=container-3 3=container-4 (事实上,它是我使用confd函数拆分的字符串)。 我希望,在每个容器上,能够过滤出容器名称,并将列表移动到我的容器第一个出现之后的列表 例如,在container-2 2=container-3 3=container-4 0=container-1 如何在confd go模板中
0=container-1
1=container-2
2=container-3
3=container-4
(事实上,它是我使用confd函数拆分的字符串)。
我希望,在每个容器上,能够过滤出容器名称,并将列表移动到我的容器第一个出现之后的列表
例如,在container-2
2=container-3
3=container-4
0=container-1
如何在confd go模板中执行此操作?我想我知道如何在go中实现这一点(但我在该特定语言中不太擅长),但我不知道如何仅使用模板来实现这一点…如果无法在模板外操作切片/字符串,如果无法向模板添加自定义函数,则必须在模板内实现这一点。这更冗长,但可行 一种方法是在父循环中嵌套两个循环。父循环将查找您要省略的容器,此时它将生成两个子循环,其中
$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}}
不确定这是否就是您要寻找的功能,您所说的“分割模板功能”到底是什么意思?模板是一种机制,
strings.Spit
是一种不同的机制。@WojciechKaczmarek在confd go模板中有一个函数,我用它来分割我的array@Riduidel也许,我不知道。当然,split
函数不在模板函数的标准库中。我建议您对该函数添加更明确的引用,以便普通读者快速了解它不仅仅是关于标准模板的。然后您可以从confd
包的实际用户那里得到更快、更准确的答案。你能不能也举出一份split
的文档?谢谢。现在我们从文档中知道它是相同的模板语言,split
是strings.split
的包装器。然后你可以修改@mkopriva给你的建议。您只需将split
的结果捕获到一个var,然后使用@mkopriva示例中的append
。看起来它比重复要短,更优雅。