2016-05-09 9 views
2

Ich habe Files slice von File Struktur in meinem Go-Programm, um den Namen und die Größe der Dateien beizubehalten. Ich erstellte Vorlage, siehe unten:Go kann das Feld nicht auswerten, wenn der Bereich zum Erstellen der Vorlage verwendet wird

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

Natürlich habe ich Panik sagen:

nicht Feld Dateien in Art auswerten [] main.File

nicht sicher, wie man Anzeigen von Dateinamen und -größen mit range in Vorlage korrekt.

Antwort

5

Der Anfangswert Ihrer Pipeline (die Punkt) ist der Wert, den Sie Template.Execute() passieren in Ihrem Fall die Files die []File vom Typ ist.

Während der Ausführung Ihrer Vorlage ist dot.[]File. Dieses Segment hat kein Feld oder eine Methode mit dem Namen Files, auf das sich .Files in Ihrer Vorlage beziehen würde.

Was sollten Sie tun einfach . ist zu benutzen, die auf Ihre Scheibe bezieht:

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

Und das ist alles. Testen sie:

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) 

Output (versuchen Sie es auf dem Go Playground):

file {data.txt 123} 

file {prog.txt 5678} 
Verwandte Themen