@NickYu
2015-05-21T13:41:03.000000Z
字数 664
阅读 2262
Golang
Slice
申明变量
var s []int
切片分配
切片是引用类型,仅支持new和make语法分配内存
//分配一个长度为10,容量为10的int切片, make语法
s = make([]int, 10)
s = new([10]int)[:]
//分配一个长度为0,容量为100的int切片 make语法
s = make([]int, 0, 100)
//或者new语法
s = new([2]int)[:0]
边界检测
如果访问超过了切片的边界会导致panic:"runtime error: index out of range"
//分配一个长度为10,容量为10的int切片, make语法
s = make([]int, 10)
s[0] = 1 // runtime error: index out of range
长度和容量
如果切片为nil,则len和cap返回0,否则返回实际长度和容量
fmt.Println("s:", len(s), cap(s))
切片重切
s2 = s[startIndex:endIndex] //获取指定位置的子切片
添加元素
可以使用append在切片尾部增加元素,此时切片的长度和容量都会根据实际需要进行调整,如果容量没有变换,append返回的切片和操作的切片实际指向同一块内存,如果超过容量重新分配过了,则操作的切片和返回的切片会指向不同的内存,而之前的数据len长度的数据会被复制到新的内存块中
// 添加一个元素
s = append(s, 1)
// 添加多个元素
s = append(s, 1, 2, 3)
// 添加另外一个切片
s = append(s, s2...)