Golang::slice和nil的對比分析

我就廢話不多說瞭,大傢還是直接看代碼吧~

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是不同的東西,在編程的需要加以區分。

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。

推薦閱讀: