```golang
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).Elem()
if sv.Kind() != reflect.Ptr && sv.Type().Kind() != reflect.Slice {
return errors.New("必需是指针类型的切片")
}
svv := reflect.New(sv.Type().Elem())
svv.Elem().FieldByName("Name").SetString("A")
sv = reflect.Append(sv, svv.Elem())
return nil
}
```
想通过反射为 l 赋值,但是并不成功,请问哪里需要修改?
```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