Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何在go模板中移动切片?_String_Go_Slice_Go Templates_Confd - Fatal编程技术网

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
。看起来它比重复要短,更优雅。