Disons que j'ai
type Person struct {
Name string
}
func (p *Person) Label() string {
return "This is " + p.Name
}
Comment puis-je utiliser cette méthode à partir d'un html/modèle? J'aurais besoin de quelque chose comme ça dans mon modèle:
{{ .Label() }}
Oubliez juste les parenthèses et ça devrait aller. Exemple:
package main
import (
"html/template"
"log"
"os"
)
type Person string
func (p Person) Label() string {
return "This is " + string(p)
}
func main() {
tmpl, err := template.New("").Parse(`{{.Label}}`)
if err != nil {
log.Fatalf("Parse: %v", err)
}
tmpl.Execute(os.Stdout, Person("Bob"))
}
Selon la documentation , vous pouvez appeler n'importe quelle méthode qui retourne une valeur (de n'importe quel type) ou deux valeurs si la seconde est de type error
. Dans le dernier cas, Execute
renverra cette erreur si elle n'est pas nulle et arrêtera l'exécution du modèle.
Vous pouvez même passer des paramètres pour fonctionner comme suit
type Person struct {
Name string
}
func (p *Person) Label(param1 string) string {
return "This is " + p.Name + " - " + param1
}
Et puis dans le modèle, écrivez
{{with person}}
{{ .Label "value1"}}
{{end}}
En supposant que la personne dans le modèle est une variable de type Personne transmise au modèle.