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

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

Mary-Kate Olsen
发布: 2024-12-10 12:58:14
原创
730 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板