一尘不染

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

go

Files的片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) }

我当然会慌张地说:

无法评估[] main.File类型的字段文件

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


阅读 151

收藏
2020-07-02

共1个答案

一尘不染

管道的初始值(
)是传递给您的值Template.Execute(),在这种情况下,Files该值是type
[]File

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

您应该做的就是简单地使用.它,它指向您的切片:

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}
2020-07-02