Heim > Backend-Entwicklung > Golang > Warum gibt Reflect.MakeSlice einen nicht adressierbaren Wert zurück?

Warum gibt Reflect.MakeSlice einen nicht adressierbaren Wert zurück?

Mary-Kate Olsen
Freigeben: 2024-12-10 12:58:14
Original
730 Leute haben es durchsucht

Why does reflect.MakeSlice return an un-addressable value?

Warum gibt Reflect.MakeSlice einen nicht adressierbaren Wert zurück?

Erhalten eines Slice-Zeigers mithilfe von Reflection

So rufen Sie einen Zeiger auf ein Slice mit ab Reflexion, verwenden Sie „reflect.New()“:

my := &My{}
myType := reflect.TypeOf(my)
slice := reflect.MakeSlice(reflect.SliceOf(myType), 10, 10)
x := reflect.New(slice.Type())
x.Elem().Set(slice)
Nach dem Login kopieren

Denken Sie daran, x.Interface() zu verwenden Verhindern Sie, dass Sie den „reflect.Value“ anstelle des tatsächlichen Werts an Ihre Funktion übergeben.

Unadressierbarkeit in „reflect.MakeSlice“ verstehen

Ein adressierbarer Wert stellt sicher, dass seine Adresse auf einen sinnvollen Ort verweist. Auf dem Stapel innerhalb einer Funktion vorgenommene Zuweisungen garantieren dies nicht und sind daher nicht adressierbar.

reflect.MakeSlice weist Werte einem lokalen Slice auf dem Heap zu, ohne sie als Elemente von Arrays, Strukturen oder dereferenzierten Zeigern zu adressieren . Daher gibt es einen nicht adressierbaren Wert zurück.

Warum ist ein Slice-Zeiger erforderlich?

In Funktionen wie mgos iter.All sind häufig Zeiger erforderlich, da häufig Slices angehängt werden. Durch das Anhängen wird die Speicheradresse des Slice geändert, die dem Aufrufer mitgeteilt werden muss.

Das obige ist der detaillierte Inhalt vonWarum gibt Reflect.MakeSlice einen nicht adressierbaren Wert zurück?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage