Heim >Backend-Entwicklung >Golang >Warum kann ich „Props[Example]' nicht „Props[Generic]' in Go Generics zuweisen?
Einschränkungen bei der Zuweisung generischer Typen
Beachten Sie den folgenden Code:
type Generic interface { ID() string } type Props[G Generic] struct{} type Example struct { id string } func (example Example) ID() string { return example.id } var ExampleProps = Props[Example]{} func Problem() Props[Generic] { return ExampleProps }
Dieser Code schlägt mit dem Fehler beim Kompilieren fehl :
cannot use ExampleProps (variable of type Props[Example]) as Props[Generic] value in return statement
Warum ist das so? tritt auf?
Go generics erstellt völlig neue benannte Typen, wenn es mit unterschiedlichen Typargumenten instanziiert wird. In diesem Fall sind „Props[Example]“ und „Props[Generic]“ unterschiedliche benannte Typen, auch wenn „Example“ „Generic“ implementiert.
Flexibilität durch Typparametrisierung
Um dieses Problem zu beheben Um die Flexibilität zu wahren, kann man Props mit einem Typparameter instanziieren:
func Problem[T Generic](v T) Props[T] { return Props[T]{Value: v} }
Dieser Ansatz ermöglicht die Rückkehr der Funktion Props[T] für einen bestimmten generischen Typ T, der Generic implementiert.
Zusammenfassung
In Go-Generika führt die Instanziierung eines generischen Typs mit unterschiedlichen Typargumenten zu unterschiedlichen benannten Typen . Daher ist der Versuch, einen Typ einem anderen zuzuweisen, nicht zulässig, selbst wenn deren Typargumente bestimmte Bedingungen erfüllen. Die Verwendung der Typparametrisierung bietet eine Lösung zur Aufrechterhaltung der Flexibilität in solchen Szenarien.
Das obige ist der detaillierte Inhalt vonWarum kann ich „Props[Example]' nicht „Props[Generic]' in Go Generics zuweisen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!