Golang 空分片与无分片
在这篇文章中,我们将看到被声明为空片和无片的片子之间的异同。
Golang中的切片是用来存储元素序列的。切片可以在任何时候被扩展,它们的声明方式与数组相同,但没有定义它们的容量。
nil slice
nil slice是一个slice,在声明的时候,我们只是定义了名称和数据类型,并没有使用内置的 make 函数。
nil slice是一个以nil为零值的slice,slice的长度和容量在开始时也是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 slice,然后打印了该slice的长度和容量。
输出
如果我们在上面的代码中运行命令 go run main.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))
}
输出
如果我们在上述代码上运行命令 go run main.go ,那么我们将在终端得到以下输出。
[]
false
0
0
[India Japan]
2
2