使用範圍管道時({{range pipeline}} T1 { { end}})在文字/範本包中,可以在範圍操作之前存取外部管道值,或作為傳遞給的父/全域管道Execute().
在在下面的範例中,我們嘗試存取範圍管道內的.Path,但.Path 不可用,因為當點迭代Files 元素時.
package main import ( "os" "text/template" ) // .Path won't be accessible, because dot will be changed to the Files element const page = `{{range .Files}}<script src="{{html .Path}}/js/{{html .}}"></script>{{end}}` type scriptFiles struct { Path string Files []string } func main() { t := template.New("page") t = template.Must(t.Parse(page)) t.Execute(os.Stdout, &scriptFiles{"/var/www", []string{"go.js", "lang.js"}}) }
使用$ 變數(建議)
根據文字/模板文檔,在執行開始時,$被設定為傳遞給Execute()的資料參數,即dot的起始值。這意味著可以使用 $.Path 存取外部作用域的 .Path。
const page = `{{range .Files}}<script src="{{html $.Path}}/js/{{html .}}"></script>{{end}}`
使用自訂變數(舊解決方案)
另一種方法是使用自訂變量,用於將值傳遞到範圍範圍內,如下圖所示:
const page = `{{$p := .Path}}{{range .Files}}<script src="{{html $p}}/js/{{html .}}"></script>{{end}}`
以上是如何在Go模板中存取一定範圍內的父/全域管道?的詳細內容。更多資訊請關注PHP中文網其他相關文章!