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
Freigeben: 2024-11-30 19:52:16
Original
431 Leute haben es durchsucht

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 {}
Nach dem Login kopieren

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
}
Nach dem Login kopieren
  • Schnittstelle von Struct Slice: Verwenden Sie eine Interface{}-Variable, um das []MyStruct-Slice:
var y interface{}
y = x
Nach dem Login kopieren
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!

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