Golang 中的空切片与 Nil 切片

go programmingserver side programmingprogramming

在本文中,我们将了解声明为空的切片与 Nil 切片之间的差异和相似之处。

Golang 中的切片用于存储元素序列。切片可以随时扩展,它们的声明方式与数组相同,但没有定义其容量。

零切片

零切片是在声明时仅定义名称和数据类型而不使用内置ma​​ke函数的切片。

零切片是将零作为其零值的切片,切片的长度和容量在开始时也为0,并且它也没有底层数组。

示例 1

考虑下面显示的代码。

package main

import (
   "fmt"
)

func main() {
   var sl []string
   fmt.Println(sl)
   fmt.Println(len(sl))
   fmt.Println(cap(sl))

   sl = append(sl, "India", "Japan")
   fmt.Println(sl)
   fmt.Println(len(sl))
   fmt.Println(cap(sl))
}

在上面的代码中,我们声明了一个 nil 切片,然后打印了该切片的长度和容量。

输出

如果我们在上面的代码上运行命令 go run main.go,那么我们将在终端中获得以下输出。

[]
0
0
[India Japan]
2
2

空切片

空切片是使用内置 ma​​ke 函数声明的切片,并且它没有 nil 作为其零值。

示例 2

考虑下面显示的代码。

package main

import (
   "fmt"
)

func main() {
   sl := make([]string, 0)
   fmt.Println(sl)
   fmt.Println(sl == nil)
   fmt.Println(len(sl))
   fmt.Println(cap(sl))

   sl = append(sl, "India", "Japan")
   fmt.Println(sl)
   fmt.Println(len(sl))
   fmt.Println(cap(sl))
}

输出

如果我们在上面的代码上运行命令go run main.go,那么我们将在终端中得到以下输出。

[]
false
0
0
[India Japan]
2
2

相关文章