Skip to content

【1】切片定义后不可以直接使用,需要让其引用到一个数组,或者make一个空间供切片来使用

【2】切片使用不能越界。

【3】简写方式:

  1. var slice = arr[0:end] ----》 var slice = arr[:end] 2) var slice = arr[start:len(arr)] ----》 var slice = arr[start:] 3) var slice = arr[0:len(arr)] ----》 var slice = arr[:]

【4】切片可以继续切片

【5】切片可以动态增长

go
package main
import "fmt"
func main(){
        //定义数组:
        var intarr [6]int = [6]int{1,4,7,3,6,9}
        //定义切片:
        var slice []int = intarr[1:4] //4,7,3
        fmt.Println(len(slice))

        slice2 := append(slice,88,50)
        fmt.Println(slice2) //[4 7 3 88 50]
        fmt.Println(slice)
        //底层原理:
        //1.底层追加元素的时候对数组进行扩容,老数组扩容为新数组:
        //2.创建一个新数组,将老数组中的4,7,3复制到新数组中,在新数组中追加88,50
        //3.slice2 底层数组的指向 指向的是新数组
        //4.往往我们在使用追加的时候其实想要做的效果给slice追加:
        slice = append(slice,88,50)
        fmt.Println(slice)
        //5.底层的新数组 不能直接维护,需要通过切片间接维护操作。
}

可以通过append函数将切片追加给切片:

【6】切片的拷贝:

go
package main
import "fmt"
func main(){
        //定义切片:
        var a []int = []int{1,4,7,3,6,9}
        //再定义一个切片:
        var b []int = make([]int,10)
        //拷贝:
        copy(b,a) //将a中对应数组中元素内容复制到b中对应的数组中
        fmt.Println(b)
}

Java · Golang · Rust