使用Go 範本:建立和修改全域變數
Go 範本提供了方便的功能,用於建立可重複使用的程式碼片段以產生動態HTML。使用模板時遇到的常見挑戰是無法跨模板的不同部分定義和修改全域變數。
問題:範圍有限的全域變數
考慮以下HTML 範本:
{{if .UserData}} {{$currentUserId := .UserData.UserId}} [<a href="#ask_question">Inside {{$currentUserId}}</a>] {{else}} {{$currentUserId := 0}} {{end}} [<a href="#ask_question">outside {{$currentUserId}}</a>]
在局部條件中,模板定義了局部變數$currentUserId 並且指派了值基於UserData 屬性。然而,這個變數的作用域僅限於 if 區塊,而我們也希望在外部存取它。
解:定義與修改變數
定義一個Go 範本中的全域變量,使用賦值運算子:=.
{{$currentUserId := 0}}
若要變更變數的值,請使用賦值運算子=.
{{$currentUserId = .UserData.UserId}}
透過在if 區塊外部定義變數但在區塊內修改它,$currentUserId 的變更會在 if 區塊之後保留。
例如,以下程式碼在if 區塊之前和之後加入一些額外的邏輯:
{{$currentUserId := 0}} Before: {{$currentUserId}} {{if .UserData}} {{$currentUserId = .UserData.UserId}} [<a href="#ask_question">Inside {{$currentUserId}}</a>] {{else}} {{$currentUserId = 0}} {{end}} After: {{$currentUserId}}
現在,對於UserData 存在和不存在的兩種情況, $currentUserId 變數都是正確的在if 區塊之外更新和存取。
其他方法
除了使用全域變量,還可以考慮:
以上是如何在Go模板中定義和修改全域變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!