首頁 > 後端開發 > Golang > 主體

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

Susan Sarandon
發布: 2024-11-12 08:18:02
原創
662 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板