package main
import "fmt"
// 通过slice,更新array
func updateSlice(a []int) {
a[0] = 333
}
func main() {
// Slice(切片):本身没有数据,是对底层array的一个view。 []里面带有: 的都是切片
arr := [...]int{0,1,2,3,4,5,6,7}
// 从arr下标1开始,往后取到下标4
arr1 := arr[1:5]
fmt.Println(arr1) // [1,2,3,4]
// 从头开始取到下标为5
arr2 := arr[:6]
fmt.Println(arr2) // [0 1 2 3 4 5]
// 从下标3开始,取到最后
arr3 := arr[3:]
fmt.Println(arr3) // [3,4,5,6,7]
// 打印出整个数组的view
arr4 := arr[:]
fmt.Println(arr4)
// 从 slice 里面再取 slice
arr5 := arr[2:5] // [2,3,4]
arr6 := arr5[1:3] // [3,4]
fmt.Println(arr6)
// slice本身没有数据,改变slice会改变原来的array
updateSlice(arr6)
fmt.Println(arr)
// Reslice :即对slice的重复赋值
s := arr[2:6]
s = s[:3]
s = s[1:]
s = arr[:]
fmt.Println(s)
// slice 扩展:从slice里面再取slice,要是下标超出就看cap,只要没超过capacity就正常
arr7 := arr6[0:5] // [3,4,5,6,7]
fmt.Println(arr7)
// 容量(capacity):是指slice的起始下标,到原array的结束位置
arr = [...]int{7,6,5,4,3,2,1,0}
fmt.Println("原数组:",arr,"capacity:",cap(arr)) // 原数组: [7 6 5 4 3 2 1 0] capacity: 8
s1 := arr[4:8]
fmt.Println("原数组:",s1,"capacity:",cap(s1)) // 原数组: [3 2 1 0] capacity: 4
s2 := s1[2:]
fmt.Println("原数组:",s2,"capacity:",cap(s2)) // 原数组: [1 0] capacity: 2
}