【发布时间】:2017-07-04 19:19:05
【问题描述】:
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),编译器会报类似“cannot use arr2 (type []int) as type [2]int in argument to foo1”的错误 em> 和 “不能在 foo2 的参数中使用 arr1(类型 [2]int)作为类型 []int”。
那么谁可以帮助解释它们之间的区别或给我一些学习链接?提前谢谢你。
【问题讨论】:
-
学习链接:围棋之旅tour.golang.org/welcome/1。常见问题解答golang.org/doc/faq。有效 Go golang.org/doc/effective_go.html 。语言规范golang.org/ref/spec 和博客blog.golang.org。此类基本问题在 Tour 中都有详细介绍:Take it two.