Go: Angabe von template-Dateinamen für die Vorlage.ParseFiles

Meine aktuellen Verzeichnis-Struktur sieht wie folgt aus:

App
  - Template
    - foo.go
    - foo.tmpl
  - Model
    - bar.go
  - Another
    - Directory
      - baz.go

Die Datei foo.go verwendet ParseFiles zu Lesen in der Vorlage-Datei während der init.

import "text/template"

var qTemplate *template.Template

func init() {
  qTemplate = template.Must(template.New("temp").ParseFiles("foo.tmpl"))
}

...

Unit-tests für foo.go wie erwartet funktionieren. Allerdings versuche ich jetzt, um unit-tests für bar.go und baz.go die sowohl importieren als foo.go und ich bekomme Panik beim Versuch Sie zu öffnen foo.tmpl.

/App/Model$ go test    
panic: open foo.tmpl: no such file or directory

/App/Another/Directory$ go test    
panic: open foo.tmpl: no such file or directory

Ich habe versucht, die Angabe des template-namens als relative Verzeichnis ("./foo.tmpl"), ein vollständiges Verzeichnis ("~/go/src/github.com/App/Template/foo.tmpl"), eine App relative Verzeichnis ("/App/Template/foo.tmpl"), und andere, aber nichts scheint zu funktionieren für beide Fälle. Die unit-tests fehlschlagen, entweder bar.go oder baz.go (oder beides).

Wo soll ich meine template-Datei platziert werden, und wie soll ich das nennen ParseFiles so dass Sie immer finden Sie die Vorlage-Datei, egal in welchem Verzeichnis ich nenne go test aus?

  • Kannst du ein klares Beispiel von dem, was Sie sind versuchen zu tun? Ich habe versucht ParseFiles("../Template/foo.tmpl") aus Model und es funktioniert Prima.
  • Aber wenn ich versuche zu laufen go test in einem tieferen Verzeichnis funktioniert Sie nicht mehr wieder. Von dem, was ich kann herausfinden, go test setzt immer das aktuelle Arbeitsverzeichnis und dann ParseFiles verwendet diese als Basis-Verzeichnis finden Sie Vorlagen, anstatt dass es relativ zu der Datei, die nennt ParseFiles. Dieser ist sehr zerbrechlich, so dass ich vermute, ich muss etwas falsch machen.
  • Ich aktualisiert meine Frage, um zu zeigen, das problem ich bin mit in.
InformationsquelleAutor Bill | 2013-09-26
Schreibe einen Kommentar