根据内存和性能来看,在函数间传递数组是一个开销很大的操作。在函数之间传递变量时,总是以值的方式传递的。如果这个变量是一个数组,意味着整个数组,不管有多长,都会完整复制,并传递给函数。
不过还有一种更好且更有效的方法来处理这个操作。
可以只传入指向数组的指针,这样只需要复制 8 字节的数据而不是复制整个数组后进行传递~!
示例:
package main
import "fmt"
var list = []int{1,2,3,4,5}
func add(list *[]int) {
for _,v := range *list {
v++
fmt.Println(v)
}
}
func main() {
add(&list)
}
运行结果:
2
3
4
5
6
不仅保证了正确的运行结果,而且还减少了内存的占用。不过需要意识到,因为现在传递的是指针,所以如果改变指针指向的值,会改变共享的内存。
网友评论