Golang中的Slice
What?
Slice(切片)可以看做是包含三个属性:
- 指向数组的指针
- 切片的长度
- 切片的容量
使用[]来访问切片,len函数可以返回切片的长度,cap函数可以返回切片的容量。
How To Creat It?
s := make([]int, 10) // len(s) = 10, cap(s) = 10
or
s := []int{1, 2, 3, 4, 5} //len(s) = 5, cap(s) = 5
or
var a [10]int
s := a[1:5] //len(s) = 4, cap(s) = 10, same as make([]int, 4, 10)
当数组a改变是,切片也会变。切片的操作也会影响数组
Some else!
append函数可以在slice后面加元素。这这时会为slice重新分配空间。如果之前是指向某个数组的,那么,append会使关系失效。
package main
import "fmt"
func main() {
var a = [...]int{1,2,3,4,5}
z := a[1:4]
fmt.Println(a)//[1 2 3 4 5]
fmt.Println(z)//[2 3 4]
z[2] = 3
fmt.Println(a)//[1 2 3 3 5]
fmt.Println(z)//[2 3 3]
z = append(z,6,7)
fmt.Println(a)//[1 2 3 3 5]
fmt.Println(z)//[2 3 3 6 7]
a[0] = 10
fmt.Println(a)//[10 2 3 3 5]
fmt.Println(z)//[2 3 3 6 7]
z[0] = 20
fmt.Println(a)//[10 2 3 3 5]
fmt.Println(z)//[20 3 3 6 7]
s := a[0:3]
z = append(z, s...)
fmt.Println(z)//[20 3 3 6 7 10 2 3]
}