gpt4 book ai didi

pointers - Golang,通过指针更改数组

转载 作者:IT王子 更新时间:2023-10-29 02:32:10 28 4
gpt4 key购买 nike

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

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

然后我发现,我无法通过指针 a simple example 更改数组给你。

package main

import (
"fmt"
)

func A(out interface{}) {
arr := make([]interface{}, 0)
arr = append(arr, "foo", 2.2)
out = &arr
B(out)
}

func B(out interface{}) {
arr := make([]interface{}, 0)
arr = append(arr, "bar", "foo", "anything")
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)
}

关于pointers - Golang,通过指针更改数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47068371/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com