Simplemente omita los paréntesis y debería estar bien. Ejemplo:
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"))
}
Según la documentation, puede llamar a cualquier método que devuelve un valor (de cualquier tipo) o dos valores si la segunda es de tipo error
. En el caso posterior, Execute
devolverá ese error si no es nulo y detendrá la ejecución de la plantilla.
¡Gracias, funciona! Lo había intentado, pero el receptor de mi método era * Persona en vez de Persona. Por lo tanto, no funciona con los receptores de puntero, parece ser la trampa. – Blacksad
También funciona con receptores de puntero. Pero tenga en cuenta que cuando tiene un 'func (p * Person) Label()' solo los valores del tipo '* Person' tendrán un método Label(). No puede llamar a ese método en una 'Persona', ya que no lo ha definido. – tux21b
Y puedo escribir {{&. }} para obtener la dirección de. en mi plantilla? – Blacksad