Go語言函式間傳遞切片的問題

2021-10-02 17:14:12 字數 484 閱讀 7043

goinaction

go 語言函式間傳遞切片,也是在函式間以值傳遞的方式進行的,由於切片的大小比較小,在函式間複製和傳遞的成本是比較低的。

// 分配包含100w個整型值的切片

slice :=

make([

]int

,1e6

)// 將 slice 傳遞到函式 foo

slice =

foo(slice)

// 函式 foo 接收乙個整型切片,並返回這個切片

func

foo(slice [

]int)[

]int

成本低的原因是去切片內部的實現只有3個字段,分別是指向底層陣列的指標,切片的長度和切片的容量。

也就是說,儲存乙個切片,只需要24個位元組即可。在函式傳遞的時候,只會複製切片本身,而不會涉及其底層指向的陣列。

Go語言的切片

go 語言切片是對陣列的抽象。go 陣列的長度不可改變,在特定場景中這樣的集合就不太適用,go中提供了一種靈活,功能強悍的內建型別切片 動態陣列 與陣列相比切片的長度是不固定的,可以追加元素,在追加時可能使切片的容量增大。在一定程度上可以看做乙個動態陣列 切片的方式 1.var identifier...

Go 陣列 切片作為函式的引數。值傳遞 引用傳遞

demo.go 切片 陣列作為函式的形參 package main import fmt 值傳遞 改變形參的值,並不會改變實參的值。例如 陣列 結構體 陣列作為函式的引數,是值傳遞。修改形參不會改變實參的值。可以通過返回值來覆蓋 修改 實參的值 切片的資料存放在記憶體的堆區。陣列的資料 函式的區域性...

Go語言切片筆記3 切片的本質make()函式

package main import fmt 切片的本質 切片就是框柱了一塊連續的記憶體 屬於引用型別 真正的資料都儲存在陣列中 make函式創造切片 使用了make 就開闢了記憶體 func main len s5 0 cap s5 0 s5 nil s6 make int,0 len s6 0...