1. 程式人生 > >[golang]nil slice和empty slice的區別

[golang]nil slice和empty slice的區別

前言

在開發的時候,會遇到對於nil slice和empty slice的問題,往往在聲明瞭slice之後,在使用的時候卻出現了問題。

問題

以下是錯誤的用法,會報陣列越界的錯誤,因為只是聲明瞭slice,卻沒有給例項化的物件,這一點如果是cpp的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是不同的東西,在程式設計的需要加以區分。