1. 程式人生 > 實用技巧 >go 切片對陣列的修改

go 切片對陣列的修改

go中陣列是值拷貝,

切片是對上層陣列的表示,應該是使用的是陣列地址,修改時是直接對原來的陣列進行修改

切片作為函式引數依舊如此

var array [5]int=[5]int{1,2,3,4,5}//可以簡化為array:=[5]int{1,2,3,4,5} 初學所以沒有簡化
	var slice[]int =array[1:3]

	fmt.Println(array)
	for i:=range slice{
		slice[i]+=100
	}
	fmt.Println(array)

	fmt.Println(slice)

  輸出

說明切片是對陣列的引用,更改切片時原陣列會發生變化。

因為切片保留對陣列的引用,切片在,陣列記憶體不能回收,所以陣列大而使用切片為其中一小部分時應該使用切片的拷貝方式。

var array [7]int=[7]int{1,2,3,4,5,6,7}
	var slice[]int =array[:3]
	sliceneed:=make([]int,len(slice))
	copy(sliceneed,slice)
	fmt.Println(sliceneed)

  結果

追加一個一個切片到另一個後面可以用append方式帶...

var array [5]int=[5]int{1,2,3,4,5}//可以簡化為array:=[5]int{1,2,3,4,5} 初學所以沒有簡化
	var slice[]int =array[1:3]
	fruits := []int{6,7}
	slice =append(slice,fruits...)