こんにちは、私はGo
を学習しています。私は、このような場合に捕まってしまった:スライス反射に要素を追加するにはどうすればよいですか?
- を私は
interface{}
- として機能するように渡さ
struct
のslice
を作成したいそして、私はここでは、このスライスに
を新しい要素を追加したいaはこのコード例ではplaygroundです。
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)
}
エラー:panic: reflect: call of reflect.Append on interface Value
はそれを動作させるための方法はありますか? 注:私は参考に作業したいです。
ソリューション:ここ
は私が行うために管理するものである:playground。
重複の可能性:http://stackoverflow.com/questions/34600817/pointer-to-interface-with-saving-type/34600906とhttp://stackoverflow.com/questions/37713749/unmarshal 37713982 – JimB