代码看似很多,实际都是些打印语句,看完对slice的理解有一定帮助:
切片理解案例:
func main() {
slice := []int{1, 2, 3, 4, 5}
slice2 := make([]int, 3, 4)
fmt.Println(slice2)
fmt.Printf("slice2的地址为:%p\n", &slice2)
fmt.Printf("slice2[0]的地址为:%p\n", &slice2[0])
slice2 = append(slice2, 23)
fmt.Println(slice2)
fmt.Printf("slice2的地址为:%p\n", &slice2)
fmt.Printf("slice2[0]的地址为:%p\n", &slice2[0])
copy(slice2, slice)
fmt.Println(slice2)
fmt.Printf("slice2的地址为:%p\n", &slice2)
fmt.Printf("slice2[0]的地址为:%p\n", &slice2[0])
slice2 = append(slice2, 223)
fmt.Println(slice2)
fmt.Printf("slice2的地址为:%p\n", &slice2)
fmt.Printf("slice2[0]的地址为:%p\n", &slice2[0])
fmt.Println("-------------------------------")
fmt.Printf("slice的地址为:%p\n", &slice)
fmt.Printf("slice[0]的地址为:%p\n", &slice[0])
fmt.Println(slice)
}
解析:
加一句,当底层数组长度超过cup()后,会维护一个新数组,而这个数组的cup()为原先数组cup(),的两倍左右(我测试结果基本都是两倍)