Ich versuche, eine Vorlage (mit HTML/Vorlage) zu schreiben und übergibt ihr eine Struktur, die einige Methoden hat, von denen viele mehrere Werte zurückgeben. Gibt es eine Möglichkeit, auf diese innerhalb der Vorlage zuzugreifen? Ich möchte in der Lage sein, etwas zu tun:Verwenden von Methoden mit mehreren Rückgabewerten
package main
import (
"fmt"
"os"
"text/template"
)
type Foo struct {
Name string
}
func (f Foo) Baz() (int, int) {
return 1, 5
}
const tmpl = `Name: {{.Name}}, Ints: {{$a, $b := .Baz}}{{$a}}, {{b}}`
func main() {
f := Foo{"Foo"}
t, err := template.New("test").Parse(tmpl)
if err != nil {
fmt.Println(err)
}
t.Execute(os.Stdout, f)
}
Aber offensichtlich funktioniert das nicht. Gibt es keinen Weg um es herum?
Ich habe als eine anonyme Struktur in meinem Code zu erstellen:
data := struct {
Foo
a int
b int
}{
f,
0,
0,
}
data.a, data.b = f.Baz()
Und das nebenbei, würde aber viel lieber etwas in der Vorlage haben. Irgendwelche Ideen? Ich habe auch versucht, eine Wrapper-Funktion zu schreiben, die ich zu funcMaps hinzugefügt habe, aber ich konnte das nie zum Funktionieren bringen.
Vielen Dank für Anregungen!
nicht Funktion aus Vorlage nennen können, das stimmt. Also werden Sie mit der Wrapper-Funktion fortfahren? Zeigen Sie Ihre aktuellen Arbeiten daran und lassen Sie die Leute Ihnen helfen, es auszuarbeiten. –
Related: [Text/Vorlage: "kann Methode/Funktion mit 0 Ergebnisse nicht aufrufen."] (Http://stackoverflow.com/questions/31221849/text-template-cant-call-method-function-with-0 -Ergebnisse). Die Lösung ist die gleiche: Sie müssen eine benutzerdefinierte Funktion erstellen. – icza
Ich habe versucht, eine Funktion (FirstValue) zu erstellen, die eine andere Funktion als Argument verwendet und dann nur den ersten Wert der ursprünglichen Ausgabe zurückgibt. Leider scheint es so, dass ich die Methode nicht in der Vorlage weitergeben kann, so dass es nicht funktioniert: {{FirstValue .Baz}} ruft .Baz()}} auf, anstatt es zu übergeben, also ist es ein Nein. –