切片
import "fmt"
func main() {
s := []int{}
fmt.Println(s, len(s), cap(s)) // [] 0 0
// make能构建slice、map和channel,这3种数据类型都需要先为底层数据结构分配好内存,然后再初始化。
s1 := make([]int, 3)
fmt.Println(s1, len(s1), cap(s1)) // [0 0 0] 3 3
s2 := make([]int, 3, 5)
fmt.Println(s2, len(s2), cap(s2)) // [0 0 0] 3 5
}
import "fmt"
func main() {
a := [...]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} // [0 1 2 3 4 5 6 7 8 9], len=10, cap=10
/*
格式:slice[low:high:max]
low: 从第几个元素开始切
high: 切到第几个元素(不含);切片元素个数 len = high - low
max: 控制切片容量;切片容量 cap = max - low
要求:low <= high <= max
*/
s1 := a[2:5:7] // [2 3 4], len=3, cap=5
s2 := a[2:5] // [2 3 4], len=3, cap=8
s3 := a[2:] // [2 3 4 5 6 7 8 9], len=8, cap=8
s4 := a[:5] // [0 1 2 3 4], len=5, cap=10
s5 := a[::7] // 语法错误
s6 := a[2:5:] // 语法错误
fmt.Println(a, s1, s2, s3, s4)
fmt.Println(len(a), len(s1), len(s2), len(s3), len(s4))
fmt.Println(cap(a), cap(s1), cap(s2), cap(s3), cap(s4))
}