转到模板:范围超过字符串

时间:2014-08-07 03:16:00

标签: string templates go range

有没有办法在Go模板中对字符串进行范围调整(也就是说,从模板本身的代码,而不是本地Go中的代码)?它似乎没有直接支持(The value of the pipeline must be an array, slice, map, or channel.),但有一些黑客将字符串拆分成单字符串或其他数组吗?

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

1 个答案:

答案 0 :(得分:0)

您可以使用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]