string - 转到模板 : range over string

标签 string templates go range

有什么方法可以在 Go 模板中覆盖字符串(也就是说,从模板本身的代码中,而不是从原生 Go 中)?它似乎不被直接支持(管道的值必须是数组、 slice 、映射或 channel 。),但是是否有一些 hack,比如将字符串拆分为单个数组-字符串什么的?

请注意,我无法编辑任何 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]

关于string - 转到模板 : range over string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25173549/

相关文章:

class - 可以将 boost::program_options 与自己的模板类一起使用吗?

json - 单值上下文中的多值 json.Marshal()

testing - 如何使用标准的 Go 测试包实现 BDD 实践?

c# - 如何将 UTF-8 字符串转换为 Unicode?

java - 在 JSF 2.0 中重新加载时未应用的模板和样式

c++ - 为什么C++在对Foo <T>::Foo(T &&)的调用中不能推断T?

dictionary - golang 内置映射和字符串键的哈希冲突?

c++ - 字符串/数组情况 c++

c# - 这是使用 c# 在字符串中的下划线 (_) 之前跳过字符的最佳方法

c# - 将字符串传递给标签的正确方法是什么?