Heim >Backend-Entwicklung >Golang >Wie kann ich generische Typen in Go einschränken, um das Vorhandensein bestimmter Felder sicherzustellen?

Wie kann ich generische Typen in Go einschränken, um das Vorhandensein bestimmter Felder sicherzustellen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-06 06:41:12483Durchsuche

How Can I Constrain Generic Types in Go to Ensure the Presence of Specific Fields?

Generische Typeinschränkungen für die Feldpräsenz

Frage

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.

Antwort

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.

Schnittstelleneinschränkungen

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
}

Zugriffsrechte Eigenschaften

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)
}

Einschränkungen

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.

Schlussfolgerung

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!

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