Hallo ich lerne Go
und ich machte einige Überlegungen. Ich habe in einem Fall wie diesem stecken:Wie kann ich der Spiegelreflexion Elemente hinzufügen?
- ich ein
slice
vonstruct
weitergegeben erstellen möchten, um alsinterface{}
- Dann möchte ich neue Elemente dieser Scheibe
Hier anhängen ist ein playground mit dem Codebeispiel.
package main
import (
"fmt"
"reflect"
)
type A struct{ Name string }
func main() {
bbb(A{})
}
func aaa(v interface{}) {
sl := reflect.ValueOf(v).Elem()
typeOfT := sl.Type()
ptr := reflect.New(typeOfT).Interface()
s := reflect.ValueOf(ptr).Elem()
sl.Set(reflect.Append(sl, s))
ptr = reflect.New(typeOfT).Interface()
s = reflect.ValueOf(ptr).Elem()
sl.Set(reflect.Append(sl, s))
}
func bbb(v interface{}) {
myType := reflect.TypeOf(v)
models := reflect.Zero(reflect.SliceOf(myType)).Interface()
aaa(&models)
fmt.Println(models)
}
Fehler:panic: reflect: call of reflect.Append on interface Value
Gibt es eine Möglichkeit, es funktioniert? Hinweis: Ich möchte an einer Referenz arbeiten.
Lösung:
Hier ist, was ich tun verwalten zu: playground.
Mögliche Duplikate: http://stackoverflow.com/questions/34600817/pointer-to-interface-with-saving-type/34600906 und http://stackoverflow.com/questions/37713749/unmarshal -into-array-of-structs-determined-at-runtime-in-go/37713982 – JimB