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