func foo(arr []int) int
和func foo(arr [*num*]int) int
有什麼區別?func foo(arr [] int)int和func foo(arr [num] int)有什麼區別int
下面是兩個例子:
func foo1(arr [2]int) int {
arr[0] = 1
return 0
}
func foo2(arr []int) int {
arr[0] = 1
return 0
}
func main() {
var arr1 = [2]int{3, 4}
var arr2 = []int{3, 4}
foo1(arr1)
println(arr1[0]) // result is 3, so arr in foo1(arr) is a copy
foo2(arr2)
println(arr2[0]) // result is 1, so arr in foo2(arr) is not a copy, it is a reference
}
如果我使用foo1(arr2)
或foo2(arr1)
我還發現,該編譯器將報告等一個錯誤「不能使用ARR2(類型[] INT)作爲型[2] INT在foo1「和」的參數中,在參數foo2「」中,不能使用arr1(類型[2] int)作爲類型[] int的參數。
那麼,誰可以幫助解釋他們之間的區別或給我一些學習的鏈接?先謝謝你。
學習的鏈接:Tour of Go https://tour.golang.org/welcome/1。常見問題https://golang.org/doc/faq。有效轉到https://golang.org/doc/effective_go.html。語言規範https://golang.org/ref/spec和博客https://blog.golang.org/。這個基本問題在巡迴賽中都有詳細的介紹:兩次。 – Volker