Cześć, uczę się Go
i robiłem jakieś odbicie. Utknąłem w przypadku tak:Jak mogę dodać elementy do odbicia plastra?
- Chcę utworzyć
slice
zstruct
przeszedł funkcjonować jakointerface{}
- Następnie chcę dołączać nowe elementy do tego wycinka
Oto playground z przykładem kodu.
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)
}
Błąd:panic: reflect: call of reflect.Append on interface Value
Czy istnieje sposób, aby to działało? Uwaga: chcę pracować nad referencją.
Rozwiązanie:
Oto co udało mi się zrobić: playground.
Możliwe duplikaty: http://stackoverflow.com/questions/34600817/pointer-to-interface-with-saving-type/34600906 i http://stackoverflow.com/questions/37713749/unmarshal -into-array-of-structs-określona-at-runtime-in-go/37713982 – JimB