nil切片和空切片

题目:

下面代码下划线处可以填入哪个选项?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
func main() {
var s1 []int
var s2 = []int{}
if __ == nil {
fmt.Println("yes nil")
}else{
fmt.Println("no nil")
}
}
``

- A. s1
- B. s2
- C. s1、s2 都可以

答案解析:

参考答案及解析:C。

知识点:nil 切片和空切片。

  1. 空切片:空切片是一个长度为 0 的切片,它是一个有效的切片对象。可以通过使用字面量或使用 make 函数创建一个空切片。例如,[]int{}make([]int, 0) 都可以创建一个空切片。空切片可以进行追加元素、访问索引等操作,只是没有任何元素。
  2. nil 切片:nil 切片是一个未分配底层数组的切片。它的零值就是 nil。nil 切片不能进行任何操作,包括追加元素、访问索引等,因为它没有底层数组可供操作。
  3. nil 切片和 nil 相等,一般用来表示一个不存在的切片;空切片和 nil 不相等,表示一个空的集合。

​ 都可以填入,但当填入的是s1时,表示为nil切片与nil相等,故输出yes nil

​ 当填入s2时,表示为空切片,空切片与nil不相等,故输出no nil


nil切片和空切片
http://example.com/2023/06/30/Go每日一题/nil切片和空切片/
作者
Feng Tao
发布于
2023年6月30日
更新于
2023年9月27日
许可协议