阅读 196

Golang 中的 Empty Slice 与 Nil Slice

在本文中,我们将看到声明为空的切片和零切片之间的差异和相似之处。

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

无切片

一个 nil 切片是这样一种切片,在其中声明时,我们只定义名称和数据类型,而不使用内置的make函数。

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

示例 1

考虑下面显示的代码。


package mainimport (
   "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命令,那么我们将在终端中得到以下输出。


[]00[India Japan]22


空切片

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

示例 2

考虑下面显示的代码。


package mainimport (
   "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命令,那么我们将在终端中得到以下输出。


[]false00[India Japan]22


文章分类
百科问答
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐