Indizierungsbeschränkungen in Go 1.18 Generics
Mit der Einführung von Generics in Go 1.18 haben Entwickler die Möglichkeit, Algorithmen zu implementieren, die mit spezifischen Typen. Eine häufige Anforderung ist die Verwendung von Typen, die die Indizierung unterstützen, wie Arrays, Slices, Maps und Strings.
Indizierbare Einschränkung
Um einen Typparameter auf indizierbare Typen zu beschränken Erwägen Sie die Verwendung der folgenden Einschränkung mit einer Union:
type Indexable interface {
~[]byte | ~string
}
Einschränkungen der indizierbaren Einschränkung
Während die obige Einschränkung für die Indizierung von Bytes und Zeichenfolgen funktioniert, gibt es Einschränkungen bei der Verwendung mit anderen indizierbaren Typen wie Karten und Arrays :
Alternativer Ansatz
Aufgrund dieser Einschränkungen ist die einzige praktische Union, die die Indizierung unterstützt []Byte | Zeichenfolge. Diese Union ermöglicht Indizierungsoperationen, unterstützt jedoch keine Bereichsoperationen, da ihr ein Kerntyp fehlt.
Beispielverwendung
Das folgende Beispiel zeigt, wie die Indexable-Einschränkung verwendet wird:
func GetAt[T Indexable](v T, i int) byte {
return v[i]
}
Diese Funktion nimmt einen indizierbaren Wert und einen Index und gibt das Byte am angegebenen Index zurück.
Schlussfolgerung
While Go 1.18 bietet eine Möglichkeit Um Typen mithilfe einer Union auf indizierbare Typen zu beschränken, bedeuten die Einschränkungen dieser Einschränkung, dass sie nur für eine begrenzte Anzahl von Anwendungsfällen praktisch ist, nämlich die Indizierung von Bytes und Zeichenfolgen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3