首頁 >後端開發 >Golang >如何在Go模板中存取一定範圍內的父/全域管道?

如何在Go模板中存取一定範圍內的父/全域管道?

Susan Sarandon
Susan Sarandon原創
2024-11-12 08:18:02705瀏覽

How to Access Parent/Global Pipeline within a Range in Go Templates?

在Go 模板中訪問範圍內的父/全域管道

問題

使用範圍管道時({{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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn