为什么这不起作用?
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
在尝试将数组传递给该函数的调用时,已将函数定义为接受切片作为参数。有两种解决方法:
调用函数时,从数组中创建一个切片。像这样更改呼叫应该足够了:
nameReader(a[:])
更改函数签名以采用数组而不是切片。例如:
func nameReader(array [3]name) {
...
}
该解决方案的缺点是该函数现在只能接受长度为3的数组,并且在调用该数组时将创建该数组的副本。
您可以在此处找到有关数组和切片的更多详细信息,以及使用它们时的常见陷阱:http : //openmymind.net/The-Minimum-You-Need-To-Know-About-Arrays-And-Slices-In-Go /
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句