Heim > Backend-Entwicklung > Golang > Warum kann ich „Props[Example]' nicht „Props[Generic]' in Go Generics zuweisen?

Warum kann ich „Props[Example]' nicht „Props[Generic]' in Go Generics zuweisen?

Susan Sarandon
Freigeben: 2024-12-20 09:15:11
Original
355 Leute haben es durchsucht

Why Can't I Assign `Props[Example]` to `Props[Generic]` in Go Generics?

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
}
Nach dem Login kopieren

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
Nach dem Login kopieren

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}
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage