arrays - 在golang中将数组作为参数传递

标签 arrays go arguments

为什么这不起作用?

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 作为参数,同时尝试在调用中将数组传递给该函数。有两种方法可以解决这个问题:

  1. 调用函数时从数组中创建一个 slice 。像这样改变调用就足够了:

    nameReader(a[:])
    
  2. 更改函数签名以采用数组而不是 slice 。例如:

    func nameReader(array [3]name) {
        ...
    }
    

    这个解决方案的缺点是函数现在只能接受一个长度为 3 的数组,并且在调用它时会复制该数组。

您可以找到有关数组和 slice 的更多详细信息,以及使用它们时的常见陷阱here

关于arrays - 在golang中将数组作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21719769/

相关文章:

python - 运行时检查复杂变量参数

c# - 数组添加奇数

arrays - 创建数组时使用 OpenMP 时出现段错误

php - 分解数据库数组 PHP

json - 如何获取 Mongo 文档并将它们作为 JSON API 响应返回

python - 使用 Tkinter 绑定(bind)传递额外参数

javascript - Swig 模板 : How to check if value exists in array?

amazon-web-services - 如何从 go lambda 中获取当前的认知用户

file - Go 中的 dirname 等价物

file - Bash:逐行传递文件中的参数