Erzwingung der Feldpräsenz mit Generika in Go
Bei der Entwicklung generischer Funktionen in Go kann es entscheidend sein, sicherzustellen, dass übergebene Werte bestimmten Feldkriterien entsprechen . In diesem Zusammenhang stellt sich häufig die Frage: Können wir Generika verwenden, um das Vorhandensein bestimmter Felder, wie z. B. ID int, in übergebenen Werten zu überprüfen?
Obwohl verschiedene Ansätze versucht wurden, ist die aktuelle Go-Generika-Implementierung in Go 1.18 führt eine Einschränkung ein: Strukturtypen werden nicht unterstützt. Daher ist es derzeit nicht möglich, eine generische Funktion zu definieren, die nur Werte mit einem bestimmten Feld akzeptiert, ohne sich auf Schnittstellenmethoden zu verlassen.
Es ist jedoch wichtig, die Bedeutung der Näherungssyntax ~T zu verstehen. Im bereitgestellten Beispiel impliziert ~struct{ ID int } Typen, deren zugrunde liegender Typ genau struct{ ID int } ist. Dies schließt Strukturen aus, die neben anderen Feldern ein ID-Int-Feld besitzen.
Es gibt zwar einen Vorschlag für Feldbegriffe in Schnittstelleneinschränkungen, dieser ist jedoch nicht in Go 1.18 enthalten. Daher fehlt der aktuellen Generics-Implementierung die Syntax zum Definieren partieller Strukturtypen.
Um sicherzustellen, dass Werte über bestimmte Felder verfügen, bleibt daher die einzig praktikable Option, die entsprechenden Methoden in einer Schnittstelle zu definieren.
Das obige ist der detaillierte Inhalt vonKann Go Generics das Vorhandensein bestimmter Felder in Strukturen erzwingen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!