有没有办法在Go模板中对字符串进行范围调整(也就是说,从模板本身的代码,而不是本地Go中的代码)?它似乎没有直接支持(The value of the pipeline must be an array, slice, map, or channel.
),但有一些黑客将字符串拆分成单字符串或其他数组吗?
请注意,我无法编辑任何go源:我在这里使用已编译的二进制文件。我需要单独从模板代码中实现这一点。
答案 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]