为了账号安全,请及时绑定邮箱和手机立即绑定

Go 中的不安全指针:函数调用结束杀死数组

Go 中的不安全指针:函数调用结束杀死数组

Go
波斯汪 2021-09-27 20:51:24
我正在编写一个库,我想向调用者返回一个非特定类型的数组(或写入一个数组)。类型可能会有所不同,具体取决于谁调用 - 但是,我可以从我的函数中创建尽可能多的所述类型的对象。一种方法是调用者创建一个数组,然后被调用者填充它——但是,没有办法知道这个数组将持续多长时间。(有没有办法让被调用者使调用者的数组变大?记住,被调用者只看到x interface{}......)我选择的另一种方式是因为我不知道上面是如何可能的,调用者给了我他特定类型的指针,我将它重定向到我创建的对象数组。下面是我的解决方案。我的问题:为什么函数调用后数组为空?他们在我操作后指向同一个数组,他们应该是一样的。我是否忽略了什么?我想过 GC,但它不可能那么快,是吗?http://play.golang.org/p/oVoPx5Nf84package mainimport "unsafe"import "reflect"import "log"func main() {    var x []string    log.Printf("before: %v, %p", x, x)    manipulate(&x)    log.Printf("after: %v, %p", x, x)}func manipulate(target interface{}) {    new := make([]string, 0, 10)    new = append(new, "Hello", "World")    log.Printf("new: %v, %p", new, new)    p := unsafe.Pointer(reflect.ValueOf(target).Pointer())    ptr := unsafe.Pointer(reflect.ValueOf(new).Pointer())    *(*unsafe.Pointer)(p) = ptr}
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 262 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信