Warum kann ich Schnittstellentypbeschränkungen nicht verwenden, um ein Slice in Go zu initialisieren?

DDD
Freigeben: 2024-11-06 20:14:02
Original
400 Leute haben es durchsucht

Why Can't I Use Interface Type Constraints to Initialize a Slice in Go?

Schnittstellentypbeschränkungen: Den Fehler „Typbeschränkungen“ verstehen

In Go können Schnittstellen als Typbeschränkungen dienen, um die Typen einzuschränken, die erfüllt werden können ihnen. Bestimmte Schnittstellen, einschließlich solcher, die Typeinschränkungen enthalten, unterliegen jedoch Einschränkungen in der Verwendung.

Grundlegendes zu Typeinschränkungen

Typeinschränkungen beziehen sich auf Schnittstellen, die Typelemente wie Unions enthalten oder eingebettete Typen, die vergleichbar sind. Diese Schnittstellen gelten als nicht grundlegend und können nicht als tatsächliche Typen für Werte oder Variablen oder als Teil von Nicht-Schnittstellentypen verwendet werden.

Beispiel:

Bedenken Sie Folgendes Schnittstelle mit einer Typeinschränkung:

type Number interface {
    int | int64 | float64
}
Nach dem Login kopieren

Einschränkung bei der Slice-Initialisierung

Eine Schnittstelle mit Typeinschränkungen, wie z. B. Number, kann nicht zum direkten Initialisieren eines Slice verwendet werden. Beispielsweise würde die folgende Zeile einen Fehler auslösen:

a := []Number{Number(1), Number(2), Number(3), Number(4)}
Nach dem Login kopieren

Fehlerursache

Der Fehler „Schnittstelle enthält Typbeschränkungen: Schnittstelle kann bei der Konvertierung nicht verwendet werden“ entsteht aus der nicht-grundlegenden Natur der Zahlenschnittstelle. Schnittstellen mit Typeinschränkungen können nur in zwei spezifischen Szenarien verwendet werden:

  1. Als Typparametereinschränkungen für generische Typen und Funktionen.
  2. Als Elemente anderer Schnittstellen, die ebenfalls als Einschränkungen verwendet werden.

Beispiel für zulässige Verwendung

Anstatt einen Zahlenabschnitt direkt zu initialisieren, können wir die folgende Typparameterbeschränkung verwenden:

type Coordinates[T Number] struct {
    x, y T
}
Nach dem Login kopieren

Fazit

Schnittstellen mit Typeinschränkungen erfüllen in Go einen bestimmten Zweck. Um Fehler zu vermeiden und das korrekte Verhalten des Programms sicherzustellen, ist es von entscheidender Bedeutung, deren Einschränkungen und die entsprechende Verwendung zu verstehen.

Das obige ist der detaillierte Inhalt vonWarum kann ich Schnittstellentypbeschränkungen nicht verwenden, um ein Slice in Go zu initialisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage