gpt4 book ai didi

go - 如何在模板中声明全局变量?

转载 作者:行者123 更新时间:2023-12-01 22:16:22 24 4
gpt4 key购买 nike

我需要编写一个模板,在其中首先定义一些变量,然后将它们用于从模板生成的内容中:

{{ if $value.Env.CADDY_URL }}
{{ $url := $value.Env.CADDY_URL }}
{{ else }}
{{ $url := printf "http://%s.example.info" $value.Name }}
{{ end }}

{{/* more template */}}
{{/* and here I would like to use $url defined above */}}
{{ $url }}

我得到错误
undefined variable "$url"

阅读 documentation , 我看到

A variable's scope extends to the "end" action of the control structure ("if", "with", or "range") in which it is declared, or to the end of the template if there is no such control structure.



这是否意味着没有全局(或整个模板的范围)变量?或者有没有办法定义 $url以便以后可以在模板中重用?

最佳答案

变量是作用域的。您创建 $url {{if}} 中的变量和 {{else}} block ,因此它们在这些 block 之外不可见。

{{if}} 之前创建变量, 并使用赋值 =而不是声明:= :

{{$url := ""}}
{{ if . }}
{{ $url = "http://true.com" }}
{{ else }}
{{ $url = "http://false.com" }}
{{ end }}

{{ $url }}

测试它:
t := template.Must(template.New("").Parse(src))

fmt.Println(t.Execute(os.Stdout, true))
fmt.Println(t.Execute(os.Stdout, false))

输出(在 Go Playground 上尝试):
http://true.com<nil>
http://false.com<nil>

注: Go 1.11 中添加了使用赋值修改模板变量,因此您需要使用 Go 1.11 或更高版本构建您的应用程序。如果您使用的是旧版本,则无法修改模板变量的值。

编辑:我发现了一个重复: How do I assign variables within a conditional

您可以在早期版本中模仿“可变模板变量”,请参阅此问题以获取示例: In a Go template range loop, are variables declared outside the loop reset on each iteration?

关于go - 如何在模板中声明全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59885098/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com