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是非法的,我从未想过我可以尝试*[]接口{}
。只是有点难理解。