text/template包中的{{range pipeline}} T1 {{end}}个操作内,是否有可能在Range操作之前访问管道值,或者将父/全局管道作为参数传递以执行?

展示我try 做什么的工作示例:

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"}})
}

play.golang.org

推荐答案

Using the $ variable (recommended)

从Package text/template文档中:

执行开始时,$被设置为传递给EXECUTE的数据参数,即点的起始值.

正如@Sandy指出的那样,因此可以使用$.Path访问外部作用域中的路径.

const page = `{{range .Files}}<script src="{{html $.Path}}/js/{{html .}}"></script>{{end}}`

Using a custom variable (old answer)

在发布几分钟后找到了一个答案

const page = `{{$p := .Path}}{{range .Files}}<script src="{{html $p}}/js/{{html .}}"></script>{{end}}`

Go相关问答推荐

如何在另一个文件夹中使用Delve运行二进制文件?

golang 的通用 map 功能

Golang在不写入磁盘的情况下为jpeg图像生成一致的哈希

Go-如何在递归函数中关闭通道

Go Programming Language书上的例子server2错了吗?

hyperledger fabric - go:在 $PATH 中找不到可执行文件

如何使用管理员权限启动 powershell 进程并重定向标准输入 (os.exec)

在 .go 文件中运行一个函数和在 Go 模板中调用它有什么区别?

在反向 GORM 中创建查询有一个关系

将 .gz 文件添加到 tar.gz 文件,但在添加之前解码 gz.输出文件被剪辑(损坏)

如何在 helm 中将字符串连接到 .AsConfig 的结果?

Golang - 将 [8] 布尔转换为字节

Unescape 在 rss 中两次逃脱了标题

如何在循环中旋转图像以便在 golang 中创建 GIF?

Grafana/Prometheus 将多个 ip 可视化为查询

golang 如何从字符串中查找表情符号?

递归数据 struct 解组在 Go Lang Protobuf 中给出错误无法解析无效的线格式数据

Golang 泛型

使用 LoadLibraryA(path_to_dll) 加载 DLL 会将文件描述符 0、1 和 2 的继承句柄标志 (HANDLE_FLAG_INHERIT) 从 1 更改为 0

如何在程序退出时使用 golang 删除文件?