Poniższy kod działa poprawnie. Dwie metody pracy na dwóch różnych strukturach i drukowanie pole struct:Metody Golanga o tej samej nazwie i aricie, ale inny typ
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()
}
Pokazuje pożądany wynik w konsoli:
A
B
Teraz, jeśli zmienić podpis metody w następujący sposób dostaję błąd kompilacji. Po prostu przesuń odbiornik metody do argumentów metody:
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)
}
nawet nie mogę skompilować program:
./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
Pytanie: Dlaczego jest to, że mogę zamienić typy struktur w odbiorniku, ale nie w argumentach , gdy metody mają taką samą nazwę i arytmetyczną?
Dziękuję. Po prostu znalazłem: http://golang.org/doc/faq#overloading – Kiril