首页 文章资讯内容详情

Golang 中的 Empty Slice 与 Nil Slice

2026-06-02 1 花语

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

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

无切片

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

nil切片是将nil设为零值的切片,切片的长度和容量在开始时也为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切片,然后打印了该切片的长度和容量。

输出结果

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

[] 0 0 [India Japan] 2 2

空切片

空切片是使用内置make函数声明的切片,它没有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)) }输出结果

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

[] false 0 0 [India Japan] 2 2