Basta omettere le parentesi e dovrebbe andare bene. Esempio:
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"))
}
Secondo la documentation, si può chiamare qualsiasi metodo che restituisce un valore (di qualsiasi tipo) o due valori se il secondo è di tipo error
. Nel caso successivo, Execute
restituirà quell'errore se è diverso da zero e interromperà l'esecuzione del modello.
Grazie, funziona! L'avevo provato, ma il destinatario del mio metodo era * Persona invece di Persona. Quindi non funziona con i ricevitori di puntatori, che sembra essere il bersaglio. – Blacksad
Funziona anche con i ricevitori di puntatori. Ma si noti che quando si ha un 'func (p * Person) Label()' solo i valori del tipo '* Person' avranno un metodo Label(). Non puoi chiamare quel metodo su un 'Person', poiché non lo hai definito. – tux21b
E posso scrivere {{&. }} per ottenere l'indirizzo di. nel mio modello? – Blacksad