Entwickler stehen häufig vor der Notwendigkeit, in Go eine generische Funktion zu definieren, die Werte mit bestimmten Feldern akzeptiert. Ein häufiges Beispiel ist die Anforderung, auf ein Feld namens „ID“ mit dem Typ „Integer“ zuzugreifen. Trotz aller Versuche scheinen generische Einschränkungen schwer zu fassen zu sein.
Ohne die Definition des Felds in einer Schnittstelle ist die Durchsetzung solcher Einschränkungen in Go leider nicht möglich. Im Gegensatz zu einigen Vorschlägen unterstützt die aktuelle Implementierung keine Strukturtypen in Generika.
Um die Feldpräsenz zu erzwingen, ist die Definition des Feldes in einer Schnittstelle erforderlich. Diese Schnittstelle dient als Typbeschränkung und stellt sicher, dass jeder an die generische Funktion übergebene Typ über das erforderliche Feld verfügt:
type IDer interface { ID int }
Um auf das eingeschränkte Feld innerhalb der generischen Funktion zuzugreifen, Der übergebene Typ muss die Schnittstellenbeschränkung erfüllen. Dieser Ansatz bietet einen Mechanismus, um das Vorhandensein und die Zugänglichkeit des gewünschten Felds sicherzustellen:
func Print[T IDer](s T) { fmt.Print(s.ID) }
Es ist wichtig zu beachten, dass dieser Ansatz keine Unterstützung für den Zugriff auf Felder mit Teilstruktur bietet Typen. Zukünftige Versionen werden diese Einschränkung jedoch möglicherweise beheben.
Um das Vorhandensein bestimmter Felder in generischen Funktionen zu erzwingen, müssen entsprechende Methoden in einer Schnittstelle definiert werden. Diese Einschränkung stellt sicher, dass an die Funktion übergebene Typen über die erforderlichen Felder zur Manipulation verfügen.
Das obige ist der detaillierte Inhalt vonWie kann ich generische Typen in Go einschränken, um das Vorhandensein bestimmter Felder sicherzustellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!