从Go(语言)中的切片获取数组

时间:2013-08-31 15:03:44

标签: arrays go slice

如果我用(例如)

创建切片
mySlice := make([]int, 5, 10)

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

(对吗?Go文档不是这样说的,但是因为切片必须总是在某个地方有一个底层数组,所以我不知道它是怎么回事。)

所以我相信以上是简写:

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

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

如果您自己的代码想要使用数组,它可以使用与数组一样的切片来完成所有操作。

你唯一不能不安全的就是创建一个指向数组的指针 - 但你可以用不安全的方法轻松完成:

arrayPtr := (*[10]int)(unsafe.Pointer(&mySlice[0]))