String Go模板:范围超过字符串

String Go模板:范围超过字符串,string,templates,go,range,String,Templates,Go,Range,在Go模板中,是否有任何方法可以从模板本身的代码而不是从本机Go中对字符串进行范围调整?管道的值必须是数组、切片、映射或通道,这似乎不受直接支持。但是有没有像将字符串拆分为单个字符串数组之类的技巧 请注意,我无法编辑任何go源代码:我在这里使用的是已编译的二进制文件。我需要仅从模板代码实现这一点。您可以使用FuncMap将字符串拆分为字符 package main import ( "text/template" "log" "os" ) func main() {

在Go模板中,是否有任何方法可以从模板本身的代码而不是从本机Go中对字符串进行范围调整?管道的值必须是数组、切片、映射或通道,这似乎不受直接支持。但是有没有像将字符串拆分为单个字符串数组之类的技巧


请注意,我无法编辑任何go源代码:我在这里使用的是已编译的二进制文件。我需要仅从模板代码实现这一点。

您可以使用FuncMap将字符串拆分为字符

package main

import (
    "text/template"
    "log"
    "os"
)

func main() {
    tmpl, err := template.New("foo").Funcs(template.FuncMap{
        "to_runes": func(s string) []string {
            r := []string{}
            for _, c := range []rune(s) {
                r = append(r, string(c))
            }
            return r
        },
    }).Parse(`{{range . | to_runes }}[{{.}}]{{end}}`)
    if err != nil {
        log.Fatal(err)
    }


    err = tmpl.Execute(os.Stdout, "hello world")
    if err != nil {
        log.Fatal(err)
    }
}
这应该是:

[h][e][l][l][o][ ][w][o][r][l][d]

你是说在模板中用字符串迭代字符吗?是的,这就是我的意思。对不起,我应该澄清一下-我没有访问Go源代码的权限。如果不使用FuncMap,你就不能这样做。它看起来越来越像这样,是的。我希望我能找到一些奇怪的破解方法。如果有循环构造,我可以让它工作,但我认为作者故意使模板系统不图灵完整,这样他们可以保证渲染不会无限循环。