reflect.Value区分CanSet和Can not Set的, 所以, 必须要返回成Can set的reflect.Value
如:
s := reflect.ValueOf(&t).Elem()
然后就可以happy的设值了, 可是不能随便设值的, 一个通用的方法就是使用Set(v Value)方法, 所以之前必须将值转成reflect.Value类型, 下面的这段代码就是转成Value类型
sliceValue := reflect.ValueOf([]int{1, 2, 3}) // 这里将slice转成reflect.Value类型
完整参考:
type T struct { Age int Name string Children []int } t := T{12, "someone-life", nil} s := reflect.ValueOf(&t).Elem() s.Field(0).SetInt(123) // 内置常用类型的设值方法 sliceValue := reflect.ValueOf([]int{1, 2, 3}) // 这里将slice转成reflect.Value类型 s.FieldByName("Children").Set(sliceValue)
有疑问加站长微信联系(非本文作者)