【Golang基础总结】数组和切片的比较

1、容量是否可伸缩。数组的容量不可伸缩,切片的容量可以伸缩。

2、是否可以进行比较。数组对于相同类型相同维度相同长度是可以比较的,而切片只能跟nil进行比较。

3、作为函数参数时,数组一般传入指向数组的指针,但是可以将切片作为参数传入函数,不是说数组不能作为入参,只是为了节省开销。

在函数间传递数组是一个开销很大的操作。在函数之间传递变量时,总是以值的方式传递的。如果整个变量是一个数组,意味着整个数组,不管有多长,都会完整复制,并传递给函数。所以一个更好且更有效的方法是可以只传入指向数组的指针,这样只需要复制8个字节的数据。

在64位架构的机器上,一个切片需要24字节的内存:指针字段需要8字节,长度和容量字段分别需要8字节。由于与切片关联的数据包含在底层数组里,不属于切片本身,所以将切片复制到任意函数的时候,对底层数组大小都不会影响。复制时只会复制切片本身,不会涉及底层数组。

原文地址:https://www.cnblogs.com/LydiammZuo/p/11877289.html