Arrays 如何从Golang中的不同函数将一个数组的元素复制到另一个数组

Arrays 如何从Golang中的不同函数将一个数组的元素复制到另一个数组,arrays,function,go,copy,return,Arrays,Function,Go,Copy,Return,我想知道如何将一个函数返回的一个数组的元素复制到另一个函数中的另一个数组中 例如: func-PossibleMoves()[8]int{ /*计算*/ 返回移动[] } func遍历(){ var currentarray[8]int 复制(Posmoves、currentarray) } 这显示了一个错误,表示未定义的Posmoves,我应该如何更正…Copy函数使用两个片作为参数(1->dst,2->src),然后,您必须使用两个片或将[8]int数组转换为片,您可以使用[:]操作符来完

我想知道如何将一个函数返回的一个数组的元素复制到另一个函数中的另一个数组中

例如:

func-PossibleMoves()[8]int{
/*计算*/
返回移动[]
}
func遍历(){
var currentarray[8]int
复制(Posmoves、currentarray)
}

这显示了一个错误,表示未定义的Posmoves,我应该如何更正…

Copy
函数使用两个片作为参数
(1->dst,2->src)
,然后,您必须使用两个片或将
[8]int
数组转换为片,您可以使用
[:]
操作符来完成。此运算符将返回一个切片,该切片将引用
[8]int
数组

Posmoves
未定义,因为您未在任何位置定义。然后,您可以创建一个全局变量:

var Posmoves [8]int

func main() {
    PossibleMoves()
    traversal()

    fmt.Println(Posmoves)
}


func PossibleMoves() [8]int {
    /* calculations*/
    return Posmoves
}

func traversal() {

    var currentarray [8]int

    copy(Posmoves[:], currentarray[:])
}

它返回
[0 0 0 0]
,因为两个数组都初始化为零值(默认值)

您也可以执行
trasversal()
,这将从
posiblemoves()
获得
Posmoval数组。因此:

func main() {
    traversal()
}

func PossibleMoves() [8]int {
    /* calculations*/

    var Posmoves [8]int

    return Posmoves
}

func traversal() {

    var currentarray [8]int

    Posmoves := PossibleMoves()

    copy(Posmoves[:], currentarray[:])

    fmt.Println(currentarray)
}

输出将再次为:
[0 0 0 0]

我希望它能帮助你!:-)

是描述符(指向支持数组的头),与值不同。数组值表示其所有元素

因此,为了将所有元素从一个数组复制到另一个数组中,不需要任何“特殊”的复制函数,只需要修改数组值

说真的,这就是你所需要的:

var currentarray [8]int = PossibleMoves()
或者你可以使用,然后它只是

currentarray := PossibleMoves()
请参见以下简单示例:

var a [8]int
var b = [8]int{1, 2, 3, 4, 5, 6, 7, 8}

fmt.Println(a, b)
a = b
fmt.Println(a, b)

a[0] = 9
fmt.Println(a, b)
输出(在上尝试):

如您所见,在赋值(
a=b
)之后,
a
数组包含与
b
数组相同的元素


这两个数组是不同的/独立的:修改
a
的元素不会修改数组
b
。我们修改了
a[0]=9
b[0]
仍然保留
1

它给出了一个错误,说panic:index of out range@toniville你能给我一个playgolang和你的代码吗?这里的代码会更简单,如果您擅长遍历(dfs),并且您认为我的代码在某些方面不正确,请让我知道我很乐意更改它@ToniVillena@Riya,您的代码失败,因为您尝试执行
strs[0]=currentSource
。并且
currentSource
被初始化为零(“”)。执行
IsValid(currentSource)
时,尝试访问字符串
b
(currentSource)(
b[0]
b[1]
)的
0
1
位置,但
currentSource
b
的长度为0。试着澄清一下。我的输入是棋盘上的两个位置,我正在尝试使用dfs查找这两个位置之间的最短路径,因此我将有一个文本文件,其中包含输入,如:A3、B2、D3、C4等。对于错误部分,我仍然得到相同的错误索引超出范围@ToniVillena
[0 0 0 0 0 0 0 0] [1 2 3 4 5 6 7 8]
[1 2 3 4 5 6 7 8] [1 2 3 4 5 6 7 8]
[9 2 3 4 5 6 7 8] [1 2 3 4 5 6 7 8]