Golang陣列的傳遞

2021-08-21 04:09:10 字數 1007 閱讀 9474

陣列與切片

陣列是具有相同唯一型別的一組已編號且長度固定的資料項序列。陣列長度最大為2gb,它是值型別。切片是對陣列乙個連續片段的引用,所以切片是乙個引用型別。

按值傳遞和按引用傳遞

go語言中函式的引數有兩種傳遞方式,按值傳遞和按引用傳遞。go預設使用按值傳遞來傳遞引數,也就是傳遞引數的副本。在函式中對副本的值進行更改操作時,不會影響到原來的變數。

按引用傳遞其實也可以稱作」按值傳遞」,只不過該副本是乙個位址的拷貝,通過它可以修改這個值所指向的位址上的值。

go語言中,在函式呼叫時,引用型別(slice、map、inte***ce、channel)都預設使用引用傳遞。

一般情況下,傳遞指標的消耗比傳遞副本的少,尤其是當陣列特別大時。具體原因是:

值傳遞需要完整的複製初始陣列並將這份拷貝放到棧中,這將耗費大量執行時間,因而值傳遞方式的效率比較低。

初始陣列的拷貝需要占用額外的記憶體空間(棧中的記憶體)

編譯程式需要專門產生一部分用來複製初始陣列的**,這將使程式變大。

如上面介紹的,有兩種方法,第一種利用指標,即引用傳遞;第二種使用切片,因為切片是引用型別,缺省會使用引用傳遞。

使用指標進行傳遞

package main

import

"fmt"

func main()

fmt.println(sum(&arr))

}func sum(arr *[5]int) int

return s

}

使用切片進行傳遞
package main

import

"fmt"

func main()

fmt.println(sum(arr[:]))

}func sum(arr int) int

return s

}

最後一種方法通常比較常用。

參考文章

1. the way to go

Golang陣列的傳遞詳解

概念介紹 陣列與切片 陣列是具有相同唯一型別的一組已編號且長度固定的資料項序列。陣列長度最大為2gb,它是值型別。切片是對陣列乙個連續片段的引用,所以切片是乙個引用型別。按值傳遞和按引用傳遞 go語言中函式的引數有兩種傳遞方式,按值傳遞和按引用傳遞。go預設使用按值傳遞來傳遞引數,也就是傳遞引數的副...

Golang陣列的傳遞詳解

概念介紹 陣列與切片 陣列是具有相同唯一型別的一組已編號且長度固定的資料項序列。陣列長度最大為2gbbgkpluf,它是值型別。切片是對陣列乙個連續片段的引用,所以切片是乙個引用型別。按值傳遞和按引用傳遞 go語言中函式的引數有兩種傳遞方式,按值傳遞和按引用傳遞。go預設使用按值傳遞來傳遞引數,也就...

golang的值傳遞和引用傳遞

s 3 int func v 3 int s fmt.println s 引數固定長度陣列是值傳遞 輸出1 2 4 func v int s fmt.println s 引數非固定長度是切片是引用傳遞 輸出0 2 4 m map int int func v map int int m fmt.pr...