深入理解Go语言中的切片 深入理解Go语言中的切片切片的底层实现Go语言中的切片底层其实是数组+长度+容量 array:是指向下层数组某元素的指针,该元素也是切片的起始元素; len:是切片的长度,即切片中当前元素的个数; cap:是切片的最大容量,cap >= len。 12345type slice struct { array unsafe.Pointer len int cap int} 切片的实例化12s := make([]byte, 5) //底层初始化了一个长度为5的数组//如果没有在 make 中指定 cap 参数,那么 cap = len,即编译器建立的数组长度为 len。 对已存在的数组进行操作的切片12u := [10]byte{11, 12, 13, 14, 15, 16, 17, 18, 19, 20}s := u[3:7] //包左不包右 切片的动态扩容实例123456789101112// slice_append.govar s []int // s被赋予零值nils = append(s, 11) fmt.Println(len(s), cap(s)) //1 1s = append(s, 12) fmt.Println(len(s), cap(s)) //2 2s = append(s, 13) fmt.Println(len(s), cap(s)) //3 4s = append(s, 14) fmt.Println(len(s), cap(s)) //4 4s = append(s, 15) fmt.Println(len(s), cap(s)) //5 8<