我正在编写一个库,我想向调用者返回一个非特定类型的数组(或写入一个数组)。类型可能会有所不同,具体取决于谁调用 - 但是,我可以从我的函数中创建尽可能多的所述类型的对象。一种方法是调用者创建一个数组,然后被调用者填充它——但是,没有办法知道这个数组将持续多长时间。(有没有办法让被调用者使调用者的数组变大?记住,被调用者只看到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
提交
取消