概念介紹
陣列與切片
陣列是具有相同唯一型別的一組已編號且長度固定的資料項序列。陣列長度最大為2gbbgkpluf,它是值型別。切片是對陣列乙個連續片段的引用,所以切片是乙個引用型別。
按值傳遞和按引用傳遞
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陣列的傳遞
陣列與切片 陣列是具有相同唯一型別的一組已編號且長度固定的資料項序列。陣列長度最大為2gb,它是值型別。切片是對陣列乙個連續片段的引用,所以切片是乙個引用型別。按值傳遞和按引用傳遞 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...