„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie können wir indexierbare Typen in Go 1.18 Generics effektiv einschränken?

Wie können wir indexierbare Typen in Go 1.18 Generics effektiv einschränken?

Veröffentlicht am 19.11.2024
Durchsuche:635

How Can We Effectively Constrain Indexable Types in Go 1.18 Generics?

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 :

  • Maps: Die Union darf nur Map-Typen mit identischen Schlüssel- und Elementtypen enthalten. Diese Einschränkung macht es für generische Algorithmen unpraktisch, die Karten mit unterschiedlichen Schlüsseln und Werten verarbeiten müssen.
  • Arrays: Die Länge eines Arrays ist Teil seines Typs, daher müsste eine Union angegeben werden alle möglichen Längen. Dies kann umständlich sein und anfällig für Fehler außerhalb der Grenzen sein.

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.

Neuestes Tutorial Mehr>

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