如何使用 go 模板连接变量和字符串

Yag*_*ora 8 go go-templates

我需要使用 go 模板连接一个作用域变量和一个字符串,如下所示:

{{ $url := .Release.Namespace + ".myurl.com" }}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Mic*_*rks 15

我相信您来自 Helm 世界,因为.Release.Namespace并且可能不想要其中的 Go 部分。

对于赫尔姆人:

Helm 处理您的 YAML 后,其中的所有内容都{{}}将被删除。要实现局部范围的变量,您可以使用两个{{}}值。

第一个是{{ $url := print .Release.Namespace ".myurl.com" }}。Helm 处理 YAML 后不会产生任何内容,但会将局部变量分配$url给 的值.Release.Namespace和常量.myurl.com

接下来是{{ $url }},它将允许您使用存储在变量中的值$url

将其组合在一起{{ $url := print .Release.Namespace ".myurl.com" }}{{ $url }}将产生subdomain.myurl.comshould 的值.Release.Namespacebe subdomain

对于 Go 开发者来说:

游乐场链接

package main

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

const (
    // exampleTemplate is a template for a StackOverflow example.
    exampleTemplate = `{{ $url := print .Release.Namespace ".myurl.com" }}{{ $url }}`
)

// templateData is the data structure to pass to the template.
type templateData struct {
    Release Release
}

// Release is a fake Go data structure for this example.
type Release struct {
    Namespace string
}

func main() {
    // Create the template.
    tmpl := template.Must(template.New("example").Parse(exampleTemplate))

    // Create the data to put into the template.
    data := templateData{Release: Release{Namespace: "subdomain"}}

    // Execute the template.
    if err := tmpl.Execute(os.Stdout, data); err != nil {
        log.Fatalf("Failed to execute template.\nError: %s", err.Error())
    }
}
Run Code Online (Sandbox Code Playgroud)