reflection - 在 Go 中使用反射设置 slice 索引

标签 reflection go slice

我在 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/

相关文章:

java - 从通用对象访问字段变量

json - 当成员类型更改时如何反序列化 JSON

mongodb - mgo find 将单值数组转换为字符串

go - 如何覆盖压缩包中的文件

python - 始终返回数组的 numpy 切片

go - 如何在没有泛型的情况下从任何 slice 中删除元素?

php - 通过引用将参数可移植地传递给 PHP 的 ReflectionMethod::invokeArgs

java - 有没有办法在Java中获取方法参数的名称?

reflection - 如何检查 Julia 0.6 中给定的 `Method` 对象是否接受给定的 `Tuple` 类型?

Javascript 用前导零切片日期/时间