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)
Denken Sie daran, x.Interface() zu verwenden Verhindern Sie, dass Sie den „reflect.Value“ anstelle des tatsächlichen Werts an Ihre Funktion übergeben.
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.
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!