我需要編寫一個模板,在其中首先定義一些變量,然后將它們用于從模板生成的內容中:{{ 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 或更高版本構建您的應用程序。如果您使用的是舊版本,則無法修改模板變量的值。
- 1 回答
- 0 關注
- 167 瀏覽
添加回答
舉報
0/150
提交
取消