为什么这不起作用?
package main
import "fmt"
type name struct {
X string
}
func main() {
var a [3]name
a[0] = name{"Abbed"}
a[1] = name{"Ahmad"}
a[2] = name{"Ghassan"}
nameReader(a)
}
func nameReader(array []name) {
for i := 0; i < len(array); i++ {
fmt.Println(array[i].X)
}
}
错误:
.\structtest.go:15: cannot use a (type [3]name) as type []name in function argument
最佳答案
您已将函数定义为接受 slice 作为参数,同时尝试在调用中将数组传递给该函数。有两种方法可以解决这个问题:
调用函数时从数组中创建一个 slice 。像这样改变调用就足够了:
nameReader(a[:])
更改函数签名以采用数组而不是 slice 。例如:
func nameReader(array [3]name) { ... }
这个解决方案的缺点是函数现在只能接受一个长度为 3 的数组,并且在调用它时会复制该数组。
您可以找到有关数组和 slice 的更多详细信息,以及使用它们时的常见陷阱here
关于arrays - 在golang中将数组作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21719769/