// 一、定义一个含有0-7的数组
arr := [...]int{0,1,2,3,4,5,6,7}
//二、取出arr数组位置2-6的切片(计数从0开始)
s := arr[2:6]
//三、取出arr数组位置为6之前的切片(计数从0开始)
a := arr[:6]
//四、取出arr数组位置为2之后的切片(计数从0开始)
b := arr[2:]
//五、取出arr数组所有的切片
c := arr[:]
s的值为 [2 3 4 5]
a的值为 [0 1 2 3 4 5]
b的值为 [2 3 4 5 6 7]
c的值为 [0 1 2 3 4 5 6 7]
// 不加长度的数组就是slice(切片)
func updateSlice(s []int){
s[0] = 100
}
func main(){
arr := [...]int{0,1,2,3,4,5,6,7}
s1 := arr[2:]
fmt.Println("s1 =", s1)
s2 := arr[:]
fmt.Println("s2 =", arr[:])
//调用updateSlice
updateSlice(s1)
//输出s1
fmt.println(s1)
//输出arr本身
fmt.println(arr)
updateSlice(s2)
//输出s2
fmt.println(s2)
//输出arr本身
fmt.println(arr)
// Reslice
fmt.println(s2)
s2 = s2[:5]
fmt.println(s2)
s2 = s2[2:]
fmt.println(s2)
}
//输出结果
s1 = [2 3 4 5 6 7]
s2 = [0 1 2 3 4 5 6 7]
调用updateSlice之后
[100 3 4 5 6 7] //(updateslice s1后的s1)
[0 1 100 3 4 5 6 7] //(updateslice s1后的arr)
[100 1 100 3 4 5 6 7] //(updateslice s2后的s2)
[100 1 100 3 4 5 6 7] //(updateslice s2后的arr)
//Reslice之后
[100 1 100 3 4 5 6 7] (原updateslice s2后的s2)
[100 1 100 3 4] (对s2进行Relice(再次切片))
[100 3 4] (对s2再次切片后的s2进行再次切片)
arr := [...]int{0,1,2,3,4,5,6,7}
s1 := arr[2:6]
s2 := s1[3:5]
s1 为 [2 3 4 5]
s2 为 [5 6]
s2:=arr[3:5] 0 1 2 s2下标
s1:=arr[2:6] 0 1 2 3 [4 5] s1下标
arr 0 1 2 3 4 5 6 7 数组中数值
注:s[i]不可以超越len(s),向后扩展不可以超越底层数组cap(s)
Slice的实现如图所示
func main(){
arr := [...]int{0,1,2,3,4,5,6,7}
s1 := arr[2:6]
fmt.Println("s1 = %v, len(s1) = %d, cap(s1)=%d\n", s1, len(s1), cap(s1))
s2 := s1[3:5]
fmt.Println("s2 = %v, len(s2) = %d, cap(s2)=%d\n", s2, len(s2), cap(s2))
}
//输出
s1 = [2 3 4 5] , len(s1)=4 , cap(s1) //len为切片长度cap为底层数组范围
s2 = [5 6], len(s2)=2, cap(s2)=3 //len为切片长度cap为底层数组范围