如何在 go 模板中连接两个字符串?
How can I join two strings in go templates?
我在 join two strings 找到了这个文档,但这在 go 模板中不起作用。
有没有办法在 go 模板中连接字符串?
编写一个函数来连接字符串并将其添加到模板中func map:
func join(sep string, s ...string) string {
return strings.Join(s, sep)
}
在解析前将函数添加到模板:
t, err := template.New(name).Funcs(template.FuncMap{"join": join}).Parse(text)
像这样在模板中使用它:
{{$x := join ", " "hello" "world"}}
我分配给变量 $x
以显示如何在模板表达式中使用函数结果。结果可以直接用作另一个函数的参数,而无需分配给变量。
这是使用切片而不是可变参数的函数版本:
func join(sep string, s []string) string {
return strings.Join(s, sep)
}
像这样使用它,其中 .
是一个切片:
{{$x := join ", " .}}
如果您的目标是直接连接两个字符串进行输出,则使用 {{a}}sep{{b}}
,其中 a
和 b
是字符串,sep
是分隔符.
使用范围将切片连接到输出。这是一个将切片 .
与分隔符 ", "
连接起来的示例。:
{{range $i, $v := .}}{{if $i}}, {{end}}{{$v}}{{end}}
使用 delimit
和 slice
的组合,例如
{{ delimit (slice "foo" "bar" "buzz") ", " }}
<!-- returns the string "foo, bar, buzz" -->
最初来自gohugo docs
在模板示例中 https://golang.org/src/text/template/example_test.go 他们向您展示了如何执行此操作。
总结:
var funcs = template.FuncMap{"join": strings.Join}
...
masterTmpl, err := template.New("master").Funcs(funcs).Parse(master)
示例中还有一些其他巧妙的技巧。
下面是我如何用 go 模板语言连接两个字符串(这是在 Kubernetes 的 Helm 模板中)。在这种情况下,我使用 go 的 printf
函数创建主机名:
host: {{ printf "%v%v" "my-super" ".apps.my.org" }}
为每个值输入 %v
。
输出为:
host: my-super.apps.my.org
您可以在 %v
值、逗号或其他任何内容之间放置空格——查看 go 的字符串格式选项以获得更多选项!
我在 join two strings 找到了这个文档,但这在 go 模板中不起作用。
有没有办法在 go 模板中连接字符串?
编写一个函数来连接字符串并将其添加到模板中func map:
func join(sep string, s ...string) string {
return strings.Join(s, sep)
}
在解析前将函数添加到模板:
t, err := template.New(name).Funcs(template.FuncMap{"join": join}).Parse(text)
像这样在模板中使用它:
{{$x := join ", " "hello" "world"}}
我分配给变量 $x
以显示如何在模板表达式中使用函数结果。结果可以直接用作另一个函数的参数,而无需分配给变量。
这是使用切片而不是可变参数的函数版本:
func join(sep string, s []string) string {
return strings.Join(s, sep)
}
像这样使用它,其中 .
是一个切片:
{{$x := join ", " .}}
如果您的目标是直接连接两个字符串进行输出,则使用 {{a}}sep{{b}}
,其中 a
和 b
是字符串,sep
是分隔符.
使用范围将切片连接到输出。这是一个将切片 .
与分隔符 ", "
连接起来的示例。:
{{range $i, $v := .}}{{if $i}}, {{end}}{{$v}}{{end}}
使用 delimit
和 slice
的组合,例如
{{ delimit (slice "foo" "bar" "buzz") ", " }}
<!-- returns the string "foo, bar, buzz" -->
最初来自gohugo docs
在模板示例中 https://golang.org/src/text/template/example_test.go 他们向您展示了如何执行此操作。
总结:
var funcs = template.FuncMap{"join": strings.Join}
...
masterTmpl, err := template.New("master").Funcs(funcs).Parse(master)
示例中还有一些其他巧妙的技巧。
下面是我如何用 go 模板语言连接两个字符串(这是在 Kubernetes 的 Helm 模板中)。在这种情况下,我使用 go 的 printf
函数创建主机名:
host: {{ printf "%v%v" "my-super" ".apps.my.org" }}
为每个值输入 %v
。
输出为:
host: my-super.apps.my.org
您可以在 %v
值、逗号或其他任何内容之间放置空格——查看 go 的字符串格式选项以获得更多选项!