Golang méthodes avec le même nom et arité, mais de type différent

Le code suivant fonctionne très bien. Deux méthodes d'exploitation sur deux différentes structures et l'impression d'un champ de la structure:

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

Montre la sortie souhaitée dans la console:

A
B

Maintenant, si je change la signature de la méthode de la façon suivante je reçois une erreur de compilation. Je viens de déplacer le récepteur de la méthode pour les arguments de la méthode:

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)
}

Je ne peux même pas compiler le programme:

./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

Question: Pourquoi est-ce que je peux échange struct types dans le récepteur, mais pas dans le
arguments, quand les méthodes ont le même nom et la même arité?

InformationsquelleAutor Kiril | 2014-05-15