Golang 空分片与无分片

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程