在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]
这样就给切片增加了一个空间。