首頁 > 後端開發 > Golang > 主體

詳解Golang數組的傳遞

藏色散人
發布: 2020-11-23 14:59:36
轉載
3947 人瀏覽過

下面由golang教學欄位介紹給大家Golang陣列的傳遞,希望對需要的朋友有幫助!

詳解Golang數組的傳遞

Golang數組的傳遞詳解

#今天小編就為大家分享一篇關於Golang數組的傳遞詳解,小編覺得內容蠻不錯的,現在分享給大家,有很好的參考價值,需要的朋友一起跟隨小編來看看吧

概念介紹

陣列與切片

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

按值傳遞和按引用傳遞

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

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

Go語言中,當函式呼叫時,參考型別(slice、map、interface、channel)都預設使用引用傳遞。

陣列傳遞時的缺點

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

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

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

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

如何避免

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

使用指標傳遞

package main
import "fmt"
func main() {
  var arr = [5]int{1, 2, 3, 4, 5}
  fmt.Println(sum(&arr))
}
func sum(arr *[5]int) int {
  s := 0
  for i := 0; i < len(arr); i++ {
    s += arr[i]
  }
  return s
}
登入後複製

使用切片傳遞

package main
import "fmt"
func main() {
  var arr = [5]int{1, 2, 3, 4, 5}
  fmt.Println(sum(arr[:]))
}
func sum(arr []int) int {
  s := 0
  for i := 0; i < len(arr); i++ {
    s += arr[i]
  }
  return s
}
登入後複製

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

以上是詳解Golang數組的傳遞的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:zzvips.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板