Golang -- 切片

来源:互联网 发布:苹果mac键盘怎么解锁 编辑:程序博客网 时间:2024/05/22 13:44

切片

切片( slice )本身并非是动态数组或数组指针.它内部通过引用底层数组,设定相关属性将操作限制在指定数组上.
有三个属性: 底层数组指针, 长度, 容量.
长度指的是当前切片的长度,也就是底层数组已经存储的长度.
容量是切片可以使用的最大长度, 不一定是底层数组的长度.

定义和初始化

切片可以从已存在的数组上得到, 也可以直接创建.
因为切片是引用类型,直接创建时不会分配底层数组,所以使用make函数或显示初始化语句,来完成内存分配.

package mainimport (    "fmt")func main() {    arr := [...]int{1, 2, 3}  // 数组    slc := arr[:]  // 切片 以arr数组为底层数组创建的    slc_a := []int{1, 2, 3}  // 切片 (显示初始化)    slc_b := make([]int, 3, 4)  //  切片 (make函数)    fmt.Printf("%T\n", slc)    fmt.Printf("%T\n", slc_a)    fmt.Printf("%T\n", slc_b)}

make 函数签名: func make(Type, size IntegerType) Type
切片的容量要大于等于长度.

package mainimport (    "fmt")func main() {    slc := make([]int, 3, 4)  // 长度3 容量4    // slc := make([]int, 3)  // 长度3 容量3    fmt.Printf("切片 len = %d, cap = %d\n", len(slc), cap(slc))}

slice是引用类型, 初始化是nil.

package mainimport (    "fmt")func main() {    var slc []int  // 仅定义    b := []int{}  // 定义同时初始化    fmt.Println(slc == nil)    fmt.Println(b == nil)}
原创粉丝点击