Mit der Einführung von Generics in Go 1.18 können Entwickler Typen mit Typeinschränkungen definieren und so sicherstellen, dass nur bestimmte Typen zulässig sind. Diese Flexibilität ist von entscheidender Bedeutung bei der Implementierung von Algorithmen, die auf Typen basieren, die Indizes unterstützen.
Können Sie Typen mit einer Indexmethode einschränken?
Um Typen mit Indizes einzuschränken, könnte man darüber nachdenken Verwenden der Indexierbarkeitseigenschaft. Die einzige sinnvolle Einschränkung, die Sie erstellen können, ist jedoch der Typ Indexable interface { ~[]byte | ~string }. Diese Einschränkung beschränkt die Typen auf Byte-Slices und Strings.
Warum ist eine Union-Einschränkung begrenzt?
Die für Union-beschränkte Typen zulässigen Operationen sind auf die von unterstützten beschränkt alle Typen im Einschränkungssatz. Um die Indizierung zu unterstützen, müssen Typen in der Union identische Schlüssel- und Elementtypen haben.
Außerdem müssen Kartentypen in der Union identische Schlüsseltypen haben. Und bei Arrays ist ihre Länge Teil des Typs, was es unpraktisch macht, eine Vereinigung für alle möglichen Längen zu definieren.
Praktische Implementierung für die Indizierung
Daher die einzige Union, die die Indizierungsanforderung erfüllt, ist []byte | Zeichenfolge. Da Byte ein Alias für uint8 ist, können Sie auch []uint8 mit dieser Einschränkung verwenden.
Einschränkungen der Union-Einschränkung für die Indizierung
Während die Union-Einschränkung []byte | string unterstützt die Indizierung, nicht den Bereich. Dies liegt daran, dass die Union keinen Kerntyp hat.
Zusammenfassend lässt sich sagen, dass die Beschränkung von Typen auf diejenigen, die Indizes in Go-Generika unterstützen, auf den spezifischen Einschränkungstyp Indexable interface { ~[]byte | beschränkt ist ~string }. Ansonsten gibt es keine alternative Möglichkeit, eine Einschränkung zu definieren, die alle indizierbaren Typen umfasst.
Das obige ist der detaillierte Inhalt vonKönnen Sie Typen zur Unterstützung von Indizes in Go 1.18 Generics einschränken?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!