Third glance in Go

在Go語言裏關於數組(Array),切片(Slice)和映射表(Map)的使用是非常常見的。有過其他語言編程背景的人會比較熟悉一下,但是也是因爲過於的熟悉,從而導致一個慣性思維,往往就會踢到“石頭”,我就是其中之一。先說數組問題:

其他的沒什麼,但是在傳遞數組指針到函數的時候,Go裏面是這樣的如果你想傳遞一個數組指針到函數裏,你必須明確給出數組的大小

func updateItem(arr *[]int) {
    arr[2] = 1
}

func main() {
    arr := new([10]int)
    updateItem(arr)
}

這樣是不行的,編譯時會給你報一個類型不匹配的錯誤,你必須這樣寫

func updateItem(arr *[10]int) {
    arr[2] = 1
}

 除了指針以外,你還可以使用切片來傳遞數組,只不過會變成這樣,不過這也是Go裏面常規的做法。

func updateItem(arr []int) {
    arr[2] = 1
}

func main() {
    arr := new([10]int)
    updateItem(arr[:])
}

 另外一个疑惑就是切片的长度与容量的定义,搞不清楚make([]int, 10, 50)后,如何去填充后40个内存空间的值? 原来是可以通过切片的扩容来对后40个空间进行访问。切片重新扩容必须以0开始,如

var slice1 = make([]int, 10, 50)
slice1 = slice1[0:len(slice1) +1]

这样就给切片增加了一个空间。

原文地址:https://www.cnblogs.com/moonz-wu/p/4264491.html