Ciao sto imparando Go
e stavo facendo un po 'di riflessione. Sono rimasto bloccato in un caso come questo:Come posso aggiungere elementi alla riflessione delle sezioni?
- Voglio creare un
slice
distruct
passato di funzionare comeinterface{}
- Poi voglio aggiungere nuovi elementi a questa fetta
ecco un playground con l'esempio di codice.
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)
}
Errore:panic: reflect: call of reflect.Append on interface Value
C'è un modo per farlo funzionare? Nota: che voglio lavorare su un riferimento.
Soluzione:
Ecco quello che riesco a fare: playground.
possibili duplicati: http://stackoverflow.com/questions/34600817/pointer-to-interface-with-saving-type/34600906 e http://stackoverflow.com/questions/37713749/unmarshal -into-array-of-structs-defined-at-runtime-in-go/37713982 – JimB