2

如果我用(例如)创建一个切片

mySlice := make([]int, 5, 10)

然后我假设一个类型的数组[10]int是静默创建的,并且我收到一个“看到”前 5 个整数的切片。

(对吧?Go 文档并没有这样表述,但是由于切片必须始终在某个地方有一个底层数组,所以我看不出它怎么可能是其他方式。)

所以我相信上面是简写:

var myArray [10]int
mySlice := myArray[0:5]

但是当我使用第一种方法时,我没有数组的句柄。有没有办法从切片中获取它?

4

2 回答 2

3

如果不使用不安全的指针技巧,就无法从切片中获取数组。

于 2013-08-31T15:49:04.510 回答
2

我不确定你想要什么样的“句柄”,但数组在 Go 中是按值传递的。因此,如果您有一个将数组作为参数的函数,您只需将切片中的数据复制到数组中,然后传递数组即可。无论如何,当您将数组传递给函数时,它都会被复制。

如果是您自己的代码想要使用数组,它可以对切片执行所有操作,就像使用数组一样。

如果没有 unsafe,你唯一不能做的就是创建一个指向数组的指针——但是你可以使用 unsafe 轻松地做到这一点:

arrayPtr := (*[10]int)(unsafe.Pointer(&mySlice[0]))
于 2013-08-31T17:02:02.000 回答