首页 >后端开发 >Golang >为什么reflect.MakeSlice返回不可寻址的值?

为什么reflect.MakeSlice返回不可寻址的值?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-10 12:58:14730浏览

Why does reflect.MakeSlice return an un-addressable value?

为什么reflect.MakeSlice返回不可寻址的值?

使用反射获取切片指针

使用以下方法检索指向切片的指针反射,利用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 中的不可寻址性

可寻址值确保其地址指向一个有意义的位置。在函数内的堆栈上进行的分配不能保证这一点,因此它们是不可寻址的。

reflect.MakeSlice 将值分配给堆上的本地切片,而不将它们作为数组、结构体或解引用指针的元素进行寻址。因此,它返回一个不可寻址的值。

为什么需要切片指针?

通常,在像 mgo 的 iter.All 这样的函数中,指针是必需的,因为切片经常被附加到。追加会更改切片的内存地址,需要将其传达给调用者。

以上是为什么reflect.MakeSlice返回不可寻址的值?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn