亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在模板中聲明全局變量?

如何在模板中聲明全局變量?

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 關注
  • 167 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號