gpt4 book ai didi

使用范围从模板构建时,Go 无法评估字段

转载 作者:IT王子 更新时间:2023-10-29 01:52:39 27 4
gpt4 key购买 nike

我的 Go 程序中有 Files slice 的 File 结构来保存文件的名称和大小。我创建了模板,见下文:

type File struct {
FileName string
FileSize int64
}
var Files []File
const tmpl = `
{{range .Files}}
file {{.}}
{{end}}
`
t := template.Must(template.New("html").Parse(tmplhtml))
err = t.Execute(os.Stdout, Files)
if err != nil { panic(err) }

当然我很 panic 地说:

can't evaluate field Files in type []main.File

不确定如何在模板中使用 range 正确显示文件名和大小。

最佳答案

管道的初始值()是您传递给 Template.Execute() 的值在你的例子中是 Files 类型为 []File

因此在您的模板执行期间, .[]File。此 slice 没有名为 Files 的字段或方法,.Files 将在您的模板中引用。

你应该做的只是使用 . 来引用你的 slice :

const tmpl = `
{{range .}}
file {{.}}
{{end}}
`

仅此而已。测试它:

var Files []File = []File{
File{"data.txt", 123},
File{"prog.txt", 5678},
}
t := template.Must(template.New("html").Parse(tmpl))
err := t.Execute(os.Stdout, Files)

输出(在 Go Playground 上尝试):

file {data.txt 123}

file {prog.txt 5678}

关于使用范围从模板构建时,Go 无法评估字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37124256/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com