Heim >Backend-Entwicklung >Golang >Wie kann ich ein Go-Struct-Array einem Interface-Array zuweisen?

Wie kann ich ein Go-Struct-Array einem Interface-Array zuweisen?

DDD
DDDOriginal
2024-11-30 19:52:16425Durchsuche

How Can I Assign a Go Struct Array to an Interface Array?

Rätsel bei der Schnittstellen-Array-Zuweisung in Go

In Go ist der Versuch, ein Struktur-Array direkt einem Schnittstellen-Array zuzuweisen, wie unten gezeigt, führt zu einem Fehler bei der Kompilierung:

x := []MyStruct{...}
var y []interface{}
y = x // Error: cannot use x as type []interface {}

Dieser Fehler ergibt sich aus dem grundlegenden Unterschied in der Art und Weise, wie Strukturtypen und Schnittstellen gespeichert werden Erinnerung. Schnittstellen werden als Zwei-Wort-Paare gespeichert, die Typinformationen und Daten umfassen, während Strukturtypen als benachbarte Felder im Speicher gespeichert werden.

Da diese Darstellungen nicht übereinstimmen, ist eine direkte Konvertierung zwischen den beiden nicht möglich. Es ist notwendig, die Elemente einzeln in das Ziel-Slice zu kopieren.

Um dieses Problem zu beheben, ziehen Sie eine der folgenden Optionen in Betracht:

  • Slice of Interfaces: Verwenden Sie ein []interface{}-Slice, wobei jedes Element eine Schnittstelle ist, die die Struktur darstellt Typ:
var y []interface{}
y = make([]interface{}, len(x))
for i, v := range x {
    y[i] = v
}
  • Schnittstelle von Struct Slice: Verwenden Sie eine Interface{}-Variable, um das []MyStruct-Slice:
var y interface{}
y = x
Im letzteren Szenario enthält die Schnittstelle einen abstrakten Verweis auf das zugrunde liegende []MyStruct-Slice, was polymorphes Verhalten ermöglicht.

Das obige ist der detaillierte Inhalt vonWie kann ich ein Go-Struct-Array einem Interface-Array zuweisen?. 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