Golang陣列的傳遞詳解

2022-09-24 14:45:25 字數 867 閱讀 1756

概念介紹

陣列與切片

陣列是具有相同唯一型別的一組已編號且長度固定的資料項序列。陣列長度最大為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...