Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pointers Golang,用指针改变数组_Pointers_Go - Fatal编程技术网

Pointers Golang,用指针改变数组

Pointers Golang,用指针改变数组,pointers,go,Pointers,Go,我有一些不同结构的数组,我需要用相同的函数func-foo(arr-interface{})来更改它们 我以这种方式使用函数foo(&arrayToChange) 然后我发现,我无法通过指针a为您更改数组 我想你的问题是, 即使在函数内部执行out=&arr, 为什么调用方中的arr没有改变 out是函数中的局部变量。 传递给函数&arr, 因此,out的值是arr的地址。 然后将out的值更改为其他值。 这不会影响此函数范围之外的任何内容。 重新分配局部变量的值不会影响函数范围之外的任何内容

我有一些不同结构的数组,我需要用相同的函数
func-foo(arr-interface{})
来更改它们

我以这种方式使用函数
foo(&arrayToChange)

然后我发现,我无法通过指针a为您更改数组


我想你的问题是, 即使在函数内部执行
out=&arr
, 为什么调用方中的
arr
没有改变

out
是函数中的局部变量。 传递给函数
&arr
, 因此,
out
的值是
arr
的地址。 然后将
out
的值更改为其他值。 这不会影响此函数范围之外的任何内容。 重新分配局部变量的值不会影响函数范围之外的任何内容

看起来你想做的是这样的:

*out = arr
也就是说,更改
out
指向的值

package main

import (
    "fmt"
)

func A(out *[]interface{}) {
    arr := make([]interface{}, 0)
    arr = append(arr, 1, 2)
    *out = arr
}

func main() {
    arr := make([]interface{}, 0)
    arr = append(arr, 1, 2, 3)
    fmt.Printf("%T\n", &arr)
    A(&arr)
    fmt.Println(arr)
}

我想你的问题是, 即使在函数内部执行
out=&arr
, 为什么调用方中的
arr
没有改变

out
是函数中的局部变量。 传递给函数
&arr
, 因此,
out
的值是
arr
的地址。 然后将
out
的值更改为其他值。 这不会影响此函数范围之外的任何内容。 重新分配局部变量的值不会影响函数范围之外的任何内容

看起来你想做的是这样的:

*out = arr
也就是说,更改
out
指向的值

package main

import (
    "fmt"
)

func A(out *[]interface{}) {
    arr := make([]interface{}, 0)
    arr = append(arr, 1, 2)
    *out = arr
}

func main() {
    arr := make([]interface{}, 0)
    arr = append(arr, 1, 2, 3)
    fmt.Printf("%T\n", &arr)
    A(&arr)
    fmt.Println(arr)
}

谢谢,这个答案适用于
[]int
。但是当我尝试在
接口{}
上使用它时,我得到了无效的间接输出(类型接口{})。我真正想要的是编写一个可以设置/更新指针值的通用函数。由于预先认为
[]接口{}
在Golang是非法的,我从未想过我可以尝试
*[]接口{}
。这有点难理解。谢谢,这个答案适用于
[]int
。但是当我尝试在
接口{}
上使用它时,我得到了无效的间接输出(类型接口{})。我真正想要的是编写一个可以设置/更新指针值的通用函数。由于预先认为
[]接口{}
在Golang是非法的,我从未想过我可以尝试
*[]接口{}
。只是有点难理解。