Golang::slice和nil的對比分析
阿新 • • 發佈:2020-12-28
我就廢話不多說了,大家還是直接看程式碼吧~
package main import ( "fmt" ) func main() { var s1 []int if s1 == nil { fmt.Println("s1==nil") } else { fmt.Println("s1!=nil") } var arr = [5]int{} s1 = arr[:] if s1 == nil { fmt.Println("s1==nil") } else { fmt.Println("s1!=nil") } }
補充:[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是不同的東西,在程式設計的需要加以區分。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援我們。如有錯誤或未考慮完全的地方,望不吝賜教。