Heim >Backend-Entwicklung >Golang >Können die „interface{}'-Arrays von Go Struktur-Arrays direkt enthalten?

Können die „interface{}'-Arrays von Go Struktur-Arrays direkt enthalten?

DDD
DDDOriginal
2024-11-27 12:46:12946Durchsuche

Can Go's `interface{}` Arrays Directly Hold Struct Arrays?

Zuweisen von Struktur-Arrays zu Schnittstellen-Arrays in Go

In Go führt das direkte Zuweisen eines Struktur-Arrays zu einem Schnittstellen-Array zu einem Fehler bei der Kompilierung. Um zu verstehen, warum, schauen wir uns die zugrunde liegenden Mechanismen genauer an.

Interface Storage

interface{} stellt einen generischen Typ dar, der jeden Wert speichern kann. Intern wird es jedoch als Paar aus zwei Wörtern dargestellt:

  1. Typwort: Enthält Informationen über den zugrunde liegenden Datentyp.
  2. Datenwort: Speichert den tatsächlichen Datenwert.

Strukturspeicher

In Im Gegensatz zu Schnittstellen speichern Strukturen ihre Felder zusammenhängend im Speicher, ohne ein separates Typwort.

Zuweisungsproblem

Da Strukturen und Schnittstellen unterschiedliche Speicherdarstellungen haben, können sie nicht direkt zugewiesen werden. Das Typsystem stellt dies sicher, um die Typsicherheit aufrechtzuerhalten.

Problemumgehungen

Um das gewünschte Verhalten zu erreichen, ziehen Sie die folgenden Optionen in Betracht:

Verwenden eines Slice von Schnittstellen

Sie können einen Slice von Schnittstellen erstellen und die Strukturelemente zuweisen einzeln:

y := make([]interface{}, len(x))
for i, v := range x {
    y[i] = v
}

Speichern einer Schnittstelle zum Slice

Alternativ können Sie eine Schnittstelle zum Struktur-Slice speichern:

var y interface{}
y = x 

Das obige ist der detaillierte Inhalt vonKönnen die „interface{}'-Arrays von Go Struktur-Arrays direkt enthalten?. 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