使用以下方法检索指向切片的指针反射,利用reflect.New():
my := &My{} myType := reflect.TypeOf(my) slice := reflect.MakeSlice(reflect.SliceOf(myType), 10, 10) x := reflect.New(slice.Type()) x.Elem().Set(slice)
记得使用x.Interface() 以防止将 Reflect.Value 而不是实际值传递给函数。
可寻址值确保其地址指向一个有意义的位置。在函数内的堆栈上进行的分配不能保证这一点,因此它们是不可寻址的。
reflect.MakeSlice 将值分配给堆上的本地切片,而不将它们作为数组、结构体或解引用指针的元素进行寻址。因此,它返回一个不可寻址的值。
通常,在像 mgo 的 iter.All 这样的函数中,指针是必需的,因为切片经常被附加到。追加会更改切片的内存地址,需要将其传达给调用者。
以上是为什么reflect.MakeSlice返回不可寻址的值?的详细内容。更多信息请关注PHP中文网其他相关文章!