首页 > 后端开发 > Golang > 正文

如何在Go模板中访问一定范围内的父/全局管道?

Susan Sarandon
发布: 2024-11-12 08:18:02
原创
677 人浏览过

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() 的数据参数,即起始值的点。这意味着可以使用 $.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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板