golang reflect 问题请教

shaotteng · · 1183 次点击
更多评论
jan-bar
想要拥有,必定付出。
```go package main import ( "errors" "fmt" "reflect" ) type T struct { Name string Age int } func main() { var l []T a2s(&l) fmt.Printf("%#v", l) } func a2s(s any) error { sv := reflect.ValueOf(s) if sv.Kind() != reflect.Ptr && sv.Type().Kind() != reflect.Slice { return errors.New("必需是指针类型的切片") } for _, v := range []string{"A", "B", "C"} { svv := reflect.New(sv.Elem().Type().Elem()) svv.Elem().FieldByName("Name").SetString(v) sv.Elem().Set(reflect.Append(sv.Elem(), svv.Elem())) } return nil } ``` 反射就得用反射的方法,`sv = reflect.Append(sv, svv.Elem())`这种写法有问题,需要避免正常代码对你的影响。
#1
``` func main() { l := make([]T, 1) a2s(&l) fmt.Printf("%#v", l) } ``` 切片要初始化
#3