【GoLang】3种创建空切片方式的区别

本文解释了Go语言中空切片和nil切片的区别,包括它们的指向、长度、容量、值和创建方式。强调了nil切片用于节省内存的情况,并指出nil切片需要初始化后才能使用。
摘要由CSDN通过智能技术生成

 当我们需要创建空切片时,一般有以下3种方式

var s []int        //1

s := []int{}        //2
s := make([]int, 0)      //3

这三种方式创建的切片的长度和容量都为0,但切片的类型不全是空切片,而是分为nil切片和空切片,切片的指向数组也分为有和没有。

var s1 []int

指向数组:不指向任何底层数组
切片长度:0
切片容量:0
切片类型:nil切片

s1 := []int{}

指向数组:指向一个长度和容量都为 0 的底层数组。
切片长度:0
切片cap:0
切片类型:空切片

s1 := make([]int, 0)

指向数组:指向一个长度和容量都为 0 的底层数组。
切片长度:0
切片容量:0
切片类型:空切片


 

为什么会出现这样的情况,首先要知道空切片和nil切片是啥。

空切片和nil切片

 空切片 和  nil切片,他们看似相同,但又有许多不同的地方。

众所周知,go在声明一个变量时,如果没有对这个变量进行赋值,那么这个变量的值将会默认被设置为该变量类型的零值。

切片的零值就是nil, 我们用var声明一个切片,而不赋值,那么得到的切片的值就为nil,而不是空,这个切片也叫做nil切片。

我们用短声明 (:=) 或make函数去初始化一个切片, 这两种方式都对切片进行了初始化处理(声明并赋值), 而不止是声明,所以得到的切片的值不为nil, 而是空(例如int[] {})

空切片是有指向长度为0的底层数组的,而nil切片是没有指向底层数组的。

1. 指向数组:

  • nil 切片: 不指向任何底层数组。
  • 空切片: 指向一个长度和容量都为 0 的底层数组。

2. 长度:

  • nil 切片: 长度为 0。
  • 空切片: 长度为 0。

3. 容量:

  • nil 切片: 容量为 0。
  • 空切片: 容量为 0。

4. 值:

  • nil 切片: 值为 nil。
  • 空切片: 值为 空。

5. 创建方式:

  • nil 切片: 可以通过 var声明 来创建。
  • 空切片: 可以通过使用 短声明 (:=) 或 make函数 来创建。

6. 使用:

  • nil 切片: 无法直接使用,需要先进行初始化。
  • 空切片: 可以直接使用,例如可以使用 append 函数向其追加元素。

需要注意的是,如果我们需要一个长度为0的切片,为节省内存,可以创建一个nil切片,而不是空切片。如果我们创建了一个nil切片, 因为未对其赋值,其无法直接使用,需要先进行初始化之后才可正常使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值