web-dev-qa-db-fra.com

Appeler une méthode à partir d'un modèle Go

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() }}
41
Blacksad

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.

55
tux21b

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.

28
Usman Qadri