我就廢話不多說(shuō)了,大家還是直接看代碼吧~
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")
}
}
補(bǔ)充:[golang]nil slice和empty slice的區(qū)別
前言
在開(kāi)發(fā)的時(shí)候,會(huì)遇到對(duì)于nil slice和empty slice的問(wèn)題,往往在聲明了slice之后,在使用的時(shí)候卻出現(xiàn)了問(wèn)題。
問(wèn)題
以下是錯(cuò)誤的用法,會(huì)報(bào)數(shù)組越界的錯(cuò)誤,因?yàn)橹皇锹暶髁藄lice,卻沒(méi)有給實(shí)例化的對(duì)象,這一點(diǎn)如果是cpp的vector,便可以直接使用,但是golang 不行。
var slice []int
slice[1] = 0
此時(shí)slice的值是nil,這種情況可以用于需要返回slice的函數(shù),當(dāng)函數(shù)出現(xiàn)異常的時(shí)候,保證函數(shù)依然會(huì)有nil的返回值。
empty slice 是指slice不為nil,但是slice沒(méi)有值,slice的底層的空間是空的,此時(shí)的定義如下:
slice := make([]int,0)//或者
slice := []int{}
當(dāng)我們查詢或者處理一個(gè)空的列表的時(shí)候,這非常有用,它會(huì)告訴我們返回的是一個(gè)列表,但是列表內(nèi)沒(méi)有任何值。
總之,nil slice 和 empty slice是不同的東西,在編程的需要加以區(qū)分。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
您可能感興趣的文章:- Golang 拷貝Array或Slice的操作
- golang中的空slice案例
- golang-切片slice的創(chuàng)建方式
- golang語(yǔ)言如何將interface轉(zhuǎn)為int, string,slice,struct等類型
- Golang中的Slice與數(shù)組及區(qū)別詳解
- golang中range在slice和map遍歷中的注意事項(xiàng)
- golang slice元素去重操作