golang中坑的慢慢踩!golang
golang中的數組是值類型,函數調用是傳入的是數組的拷貝,若是想改變數組的值,可考慮使用指針數組,即函數調用時傳入數組的地址數組
golang中的切片是引用類型,可是在函數中使用append給切片追加元素是行不通的,須要使用切片的指針類型才能增長元素數據結構
數組的使用:app
package main import ( "fmt" ) func ChangeArr(arr [5]int) { arr[0] = 6 } func ChangeArr2(arr *[5]int) { arr[0] = 6 } func main() { a := [5]int{1, 2, 3, 4, 5} PrintArr(a) ChangeArr(a) PrintArr(a) ChangeArr2(&a) PrintArr(a) } func PrintArr(arr [5]int) { fmt.Println("\n打印數組:") for _, v := range arr { fmt.Print(v, ",") } }
運行結果:函數
切片的使用:性能
package main import ( "fmt" ) func ChangeArr(arr []int) { arr[1] = 20 arr = append(arr, 8) //此處的元素並無增長到切片 } func ChangeArr2(arr *[]int) { (*arr)[0] = 6 //由於傳入的是切片指針,因此全部使用切片的地方都必須是指針類型的切片(這裏與數組不一樣) *arr = append(*arr, 7) //此處的元素添加進了切片 } func main() { a := []int{1, 2, 3, 4, 5} PrintArr(a) ChangeArr(a) PrintArr(a) ChangeArr2(&a) PrintArr(a) } func PrintArr(arr []int) { fmt.Println("\n打印切片:") for _, v := range arr { fmt.Print(v, ",") } }
運行結果:spa