golang nil切片與空切片

2021-10-20 11:49:34 字數 793 閱讀 1605

var slice int 建立出來的 slice 其實是乙個 nil slice。它的長度和容量都為0。和nil比較的結果為true。這裡比較混淆的是empty slice,empty slice的長度和容量也都為0,但是所有的空切片的資料指標都指向同乙個位址 0xc42003bda0。空切片和 nil 比較的結果為false。

空切片的定義:

var slice = int{}

var slice = make(int,0)

make函式需要傳入三個引數:切片型別,長度,容量。當然,容量可以不傳,預設和長度相等。

以下是錯誤的用法,會報陣列越界的錯誤,因為只是宣告了slice,卻沒有給例項化的物件,這一點如果是c++的vector,便可以直接使用,但是golang 不行。

var slice int

slice[1] = 0

此時slice的值是nil,這種情況可以用於函式需要返回slice,當函式出現異常的時候,保證函式依然會有返回值nil。

empty slice 是指slice不為nil,但是slice沒有值,slice的底層的空間是空的,此時的定義如下:

slice := make(int,0)//或者

slice := int{}

當我們查詢或者處理乙個空的列表的時候,這非常有用,它會告訴我們返回的是乙個列表,但是列表內沒有任何值。

總之,nil slice 和 empty slice是不同的東西,在程式設計的需要加以區分。

陣列與切片

1 陣列 在go語言裡,陣列是乙個長度固定的資料型別,用於儲存一段具有相同的型別的元素的連續塊。陣列儲存的型別可以是內建型別,如整型或者字串,也可以是某種結構型別。1 陣列的建立 先宣告,再賦值 var array 5 int array 1 3 建立固定長度的陣列 array 5 int 陣列長度...

陣列與切片

1 在golang中陣列與切片的定義 在golang中,有乙個 罕見 的復合型別,叫切片,切片是基於陣列的,golang和其它語言不一樣,在golang中,陣列是不可變的,對陣列進行型別轉換等操作都會導致golang隱式的申請一塊記憶體,然後將原陣列的內容複製到這塊記憶體。在實際的開發當中,我們經常...

golang 定義乙個空切片 go語言切片用法詳解

1.定義 切片在go語言的原始碼定義如下所示,由於其資料結構中有指向底層陣列的指標,所以切片是一種引用型別。src runtime slice.go type slice struct s1 array 0 4 s2 array 4 s3 array 2 fmt.println s1 0 1 2 3...