func main() {
arr := make([]int, 0, 9) //長度0,容量9
fmt.Printf("地址0: %p\n", arr) //地址不變
fmt.Printf("len: %d, cap: %d, data:%+v \n", len(arr), cap(arr), arr) //長度0
arr = append(arr, 1, 2, 3) //地址不變,底層陣列不變
fmt.Printf("len: %d, cap: %d, data:%+v \n", len(arr), cap(arr), arr) //長度3
add(arr) //append新增
fmt.Println(arr)
fmt.Printf("地址2: %p\n", arr) //地址不變,底層陣列不變
//長度3,長度不變,值不變:1,2,3.底層陣列值變
fmt.Printf("len: %d, cap: %d, data:%+v \n", len(arr), cap(arr), arr)
}
func add(arr []int) {
//append僅僅改了引數的len長度,不會改變原始值的len長度,但是底層陣列值會變,地址不變
//但是修改原始資料為arr[1] = 10 ,arr[2] = 11),可以改變原始切片,切片是引用型別
//另外還要注意,cap容量不足時的自動擴容後,底層陣列的改變
arr = append(arr, 10, 11)
fmt.Printf("地址1: %p\n", arr) //地址不變,底層陣列不變
fmt.Printf("len: %d, cap: %d, data:%+v \n", len(arr), cap(arr), arr) //長度5,值:1,2,3,10,11
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結