Lassen Sie uns das folgende Programm betrachtenLegendes Typ Behauptungen mit Schnittstellen und Zeiger in Go
type Fruit interface {
Color() string
}
type Apple struct {
color string
}
func (x *Apple) Color() string {
return x.color
}
func (x *Apple) Compare(y Fruit) bool {
_, ok := y.(*Apple)
if ok {
ok = y.Color() == x.Color()
}
return ok
}
func main() {
a := Apple{"red"}
b := Apple{"green"}
a.Compare(&b)
}
Nun beachten Sie die letzte Zeile, die a.Compare(&b)
sagt. Hier gebe ich einen Zeiger auf Apple
. Dies funktioniert korrekt, aber beachten Sie, dass meine Compare
Funktion den Zeiger (y Fruit)
nicht akzeptiert.
Nun, wenn ich die letzte Zeile ändern a.Compare(b)
zu sagen, dann gibt er mir folgende Fehlermeldung:
cannot use b (type Apple) as type Fruit in argument to a.Compare: Apple does not implement Fruit (Color method has pointer receiver)
Was [go] ing hier auf?
Schauen Sie sich diese im Zusammenhang/mögliche doppelte Frage + Antwort: [Go, wird X nicht implementieren Y (... Methode hat einen Zeiger Empfänger)] (http://stackoverflow.com/questions/40823315/go-x-does-not-implement-y-method-has-a-pointer-receiver/40824044#40824044) – icza