为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
LEATH 2022-05-10 13:38:41
我需要编写一个模板,在其中首先定义一些变量,然后将它们用于从模板生成的内容中:{{ 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"阅读文档,我看到了变量的范围扩展到声明它的控制结构(“if”、“with”或“range”)的“结束”操作,如果没有这样的控制结构,则扩展到模板的末尾。这是否意味着没有全局(或整个模板的范围)变量?或者有没有一种方法可以定义$url以便稍后在模板中重复使用?
查看完整描述

1 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

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


在 , 之前创建变量{{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 或更高版本构建您的应用程序。如果您使用的是旧版本,则无法修改模板变量的值。


查看完整回答
反对 回复 2022-05-10
  • 1 回答
  • 0 关注
  • 153 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信