10 切片的默认行为
在进行切片时,可以使用切片的默认行为来忽略上下界。
切片下界的默认值为0,上界则是该切片的长度。
对于数组:
var a [10]int
以下切片等价:
a[0, 10]
a[: 10]
a[0:]
a[:]
package main
import "fmt"
func main() {
iii := [4]int{0, 1, 2, 3}
s1 := iii[:]
s2 := iii[0:]
s3 := iii[:4]
s4 := iii[0:4]
fmt.Println(s1)
fmt.Println(s2)
fmt.Println(s3)
fmt.Println(s4)
}
11 切片的长度与容量
切片拥有长度与容量。
切片的长度就是其所包含的元素个数。
切片的容量是从它的第一个元素开始数,到其底层数组元素末尾的个数,注意是指数组。
切片s的长度和容量可以通过表达式len(s)与cap(s)来获取。
可以通过重新切片来扩展一个切片的容量。
package main
import "fmt"
func main() {
s := []int{1, 2, 3, 4, 5, 1, 1, 1, 1, 1}
printSlice(s)
s = s[:0]
printSlice(s)
s = s[:4]
printSlice(s)
s = s[:2]
printSlice(s)
}
func printSlice(s []int) {
fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s)
}
12 nil切片
切片的零值为nil
nil切片的长度与容量为0,且没有底层数组。
package main
import "fmt"
func main() {
var s []int
fmt.Println(len(s), cap(s))
if s == nil {
fmt.Println(s)
}
}
13 用make创建切片
切片可以用内建函数make创建。
make函数会分配一个元素为零值的数组并返回一个引用了它的切片:
a := make([]int, 5)
可以向make传入第三个参数用于指定容量
b := make([]int, 0, 5)
b = b[:cap(b)]
b = b[1:]
package main
import "fmt"
func main() {
s := make([]int, 5)
fmt.Println(s, len(s), cap(s))
ss := make([]int, 0, 5)
fmt.Println(ss, len(ss), cap(ss))
}