我在 Go 中,使用 slice 的 reflect.Value 表示。我有以下内容:
slice := reflect.MakeSlice(typ, len, cap)
如果我想从slice
中获取第i个值,很简单:
v := slice.Index(i) // returns a reflect.Value
但是,我似乎找不到设置第 i 个值的方法。 reflect.Value
有很多 setter 方法,例如,如果我有一个 map,m
,以下是可能的:
m.SetMapIndex(key, value) // key and value have type reflect.Value
但似乎没有 slice 的等价物。我的一个想法是,也许从 slice.Index(i)
返回的值实际上是一个指针,所以调用 v := slice.Index(i); v.Set(newV)
会起作用吗?我不确定。想法?
最佳答案
想通了!原来我过早地发布了这个 - 我猜 slice.Index(0)
返回一个指针是正确的。特别是:
one := reflect.ValueOf(int(1))
slice := reflect.MakeSlice(reflect.TypeOf([]int{}), 1, 1)
v := slice.Index(0)
fmt.Println(v.Interface())
v.Set(one)
fmt.Println(v.Interface())
v = slice.Index(0)
fmt.Println(v.Interface())
打印:
0
1
1
(这里是 runnable code 在 Playground )
关于reflection - 在 Go 中使用反射设置 slice 索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18115785/