正文
切片,这是一个在go语言中引入的新的理念。它有一些特征如下:
-
对数组抽象
-
数组长度不固定
-
可追加元素
-
切片容量可增大
-
容量大小成片增加
我们先把上面的理念整理在这里,但是实际的还是要撸码来解决问题。
定义或申明切片
首先我们看看申明切片:
var sliceName []type
定义完成后,我们需要定义切片:
sliceName = make([]type, len)
也可以适当简写:
sliceName := make([]type, len)
在上面的例子中,我们申明了一个切片,我们现在先运行看看结果。
package main
import "fmt"
func main() {
sliceName := make([]string, 3)
fmt.Printf("切片slice_name的长度:len=%d \n", len(sliceName))
}
那么看到这里小伙伴们是不是发现切片,也就是我们普通的一个数组,那么它凭什么叫做切片呢?
我么可以看到另外一个make函数:
make([]T, length, capacity)
在上面的capacity是数组的容量,length则是数组的长度。当新插入元素后长度超过容量,则会自动增加一个容量来填装数据,但是
切片的空间大小是 capacity的整数倍
。demo如下:
package main
import "fmt"
func main() {
sliceName := make([]string, 3, 15)
fmt.Printf("切片slice_name的长度:len=%d cap=%d \n", len(sliceName), cap(sliceName))
sliceName[0] = "程先生"
fmt.Println(sliceName)
}
初始化切片
任何变量或常量在使用之前都需要初始化,不过常量是直接把申明和初始化写在一起的。我们来看看切片的初始化:
arr := [] int{1, 2, 3}
fmt.Println(arr)
sliceName := arr[:]
fmt.Println(sliceName)
sliceName1 := arr[1:3]
fmt.Println(sliceName1)
当然切片也会存在空对象nil的情况,在你申明后不初始化的情况下则会产生nil。
切片的增删改查
当我们创建了一个切片后,我们需要对切片的元素进行增加该怎么办呢?
我们可以看到内置append函数: func append(slice []Type, elems ...Type) []Type,代码如下:
sliceName = append(sliceName, 4)
fmt.Println(sliceName)