如果没有反射,可以将多个类型添加到类型 []interface{} 的列表中。像这样:package mainimport "fmt"func main() { var foo []interface{} foo = append(foo, "Test") foo = append(foo, "Foo") foo = append(foo, 10) fmt.Printf("%v\n", foo)}这可以通过反射实现吗?我尝试了以下操作,但我得到了一个恐慌说:“恐慌:reflect.Set:类型字符串的值不可分配给类型 []interface {} ”package mainimport ( "fmt" "reflect")func rf(inf interface{}) { val := reflect.Indirect(reflect.ValueOf(inf)) field := val.FieldByName("Foo") rslice := reflect.MakeSlice(reflect.SliceOf(field.Type()), 0, 5) v := reflect.Indirect(reflect.ValueOf("Test")) rslice = reflect.Append(rslice, v)}func main() { var s struct { Foo []interface{} } rf(&s) fmt.Printf("%+v\n", s)}
1 回答

小唯快跑啊
TA贡献1863条经验 获得超2个赞
该Foo字段已经是 type []interface{},因此SliceOf正在创建 a [][]interface{},这就是导致您看到的错误的原因。
删除SliceOf, 然后使用field.Set(rslice)将新值设置回 struct 字段。
func rf(inf interface{}) {
val := reflect.Indirect(reflect.ValueOf(inf))
field := val.FieldByName("Foo")
rslice := reflect.MakeSlice(field.Type(), 0, 5)
v := reflect.Indirect(reflect.ValueOf("Test"))
rslice = reflect.Append(rslice, v)
field.Set(rslice)
}
http://play.golang.org/p/gWK3-cP_MN
- 1 回答
- 0 关注
- 186 浏览
添加回答
举报
0/150
提交
取消