Heim >Backend-Entwicklung >Golang >Kann Go Generics das Vorhandensein bestimmter Felder in Strukturen erzwingen?

Kann Go Generics das Vorhandensein bestimmter Felder in Strukturen erzwingen?

Barbara Streisand
Barbara StreisandOriginal
2024-12-10 00:47:13420Durchsuche

Can Go Generics Enforce the Presence of Specific Fields in Structs?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn