Ich versuche, eine klonbare Schnittstelle zu erstellen und einige Probleme zu bekommen, Strukturen zu bekommen, um die Schnittstelle zu implementieren. Es scheint, dass dies eine Grenze des Gehens ist, die in vielen anderen Sprachen nicht ist. Ich versuche zu verstehen, warum dieses Limit gerechtfertigt ist.Schnittstelle, die es selbst zurückgibt (klonbar)
var _ Cloneable = test{}
type Cloneable interface {
Clone() Cloneable
}
type test struct {
}
func (t *test) Clone() *test {
c := *t
return &c
}
Spielplatz: https://play.golang.org/p/Kugatx3Zpw
Followup Frage, da es scheint immer noch seltsam für mich. Dies gilt auch kompilieren nicht
var _ Cloneable = &test{}
type Cloneable interface {
Clone() Cloneable
}
type Cloneable2 interface {
Clone() Cloneable2
}
type test struct {
}
func (t *test) Clone() Cloneable2 {
c := *t
return &c
}
Spielplatz: https://play.golang.org/p/jlyMDPF1WB
das Ändern des Rückgabetyps zu einer Schnittstelle und nicht zu einer Struktur macht es nicht weniger verschieden. Die Methodensignaturen 'Clone() Cloneable' und' Clone() Cloneable2' sind nicht identisch. – JimB
Das ist eine Wahl der Sprache, damit beide nicht richtig funktionieren? Ich meine, sie können einander zugeordnet werden. Ich schätze, ich versuche zu verstehen, warum das nicht funktioniert –
[Assignability] (https://golang.org/ref/spec#Assignability) bedeutet nicht, dass die Typen gleich sind. –