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

时间:2016-05-09 19:48:38

标签: go go-templates

我的Go程序中有FilesFile结构片段,用于保存文件的名称和大小。我创建了模板,见下文:

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正确显示文件名和大小。

1 个答案:

答案 0 :(得分:5)

您的管道的初始值()是您传递给Template.Execute()的值,在您的情况下为Files,其类型为[]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}