Heim >Backend-Entwicklung >Golang >Warum kann ich in Go keinen generischen Typ einem anderen zuweisen, selbst wenn ihre Typargumente kompatibel sind?
In Go kann ein Generikum keinem anderen zugewiesen werden, selbst wenn seine Typargumente auf die Art der generischen Instanziierung zurückzuführen sein können.
Generische Typen in Go
Generische Typen Ermöglichen Sie die Wiederverwendung von Code, indem Sie eine Vorlage definieren, die mit verschiedenen Datentypen verwendet werden kann. Wenn Sie einen generischen Typ instanziieren, geben Sie konkrete Typargumente an, um den spezifischen verwendeten Datentyp anzugeben.
Zuweisungsbeschränkungen
Das Zuweisen eines Werts eines generischen Typs zu einem anderen kann sein nicht immer erlaubt sein. Dies liegt daran, dass die Instanziierung eines generischen Typs mit unterschiedlichen Typargumenten zu zwei unterschiedlichen benannten Typen führt.
Zum Beispiel:
type Props[G Generic] struct{} type Example struct{} func (Example) ID() string { return "" } var ExampleProps = Props[Example]{} func Problem() Props[Generic] { return ExampleProps // Compilation error }
In diesem Beispiel implementiert „Example“ die generische Schnittstelle. Allerdings werden Props[Example] und Props[Generic] immer noch als unterschiedliche Typen betrachtet. Daher ist die Zuweisung von BeispielProps (vom Typ Props[Example]) an Problem (das Props[Generic] zurückgibt) nicht zulässig.
Auflösung
Wenn Sie möchten Um Werte zwischen generischen Typen zuzuweisen, können Sie den generischen Typ mit einem Typparameter instanziieren. Zum Beispiel:
func Problem[T Generic](v T) Props[T] { return Props[T]{Value: v} }
In diesem Fall nimmt Problem einen generischen Parameter T und instanziiert Props mit T. Dies ermöglicht mehr Flexibilität und kann in Situationen verwendet werden, in denen die Typargumente bestimmte Bedingungen erfüllen.
Das obige ist der detaillierte Inhalt vonWarum kann ich in Go keinen generischen Typ einem anderen zuweisen, selbst wenn ihre Typargumente kompatibel sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!