Il seguente codice funziona correttamente. Due metodi di operare su due le strutture diverse e la stampa di un campo della struct:Metodi Golang con lo stesso nome e arità, ma tipo diverso
type A struct {
Name string
}
type B struct {
Name string
}
func (a *A) Print() {
fmt.Println(a.Name)
}
func (b *B) Print() {
fmt.Println(b.Name)
}
func main() {
a := &A{"A"}
b := &B{"B"}
a.Print()
b.Print()
}
mostra l'output desiderato nella console:
A
B
Ora, se cambio la firma del metodo nel seguente In questo modo ottengo un errore di compilazione. Ho appena spostare il ricevitore del metodo agli argomenti del metodo:
func Print(a *A) {
fmt.Println(a.Name)
}
func Print(b *B) {
fmt.Println(b.Name)
}
func main() {
a := &A{"A"}
b := &B{"B"}
Print(a)
Print(b)
}
non riesco nemmeno a compilare il programma:
./test.go:22: Print redeclared in this block
previous declaration at ./test.go:18
./test.go:40: cannot use a (type *A) as type *B in function argument
Domanda: perché è, che io possa interscambiare struct types nel ricevitore, ma non negli argomenti , quando i metodi hanno lo stesso nome e l'arità?
Grazie. L'ho appena trovato: http://golang.org/doc/faq#overloading – Kiril