duanguane1670 2017-11-02 05:45
浏览 244
已采纳

Golang,通过指针更改数组

I have some arrays of different struct, and I need to change them by the same function func foo(arr interface{}).

And I use the function in this way foo(&arrayToChange)

Then I find that, I cannot change the array by pointer a simple example for you.

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
", &arr)
    A(&arr)
    fmt.Println(arr)
}
  • 写回答

1条回答 默认 最新

  • dtnpf35197 2017-11-02 06:02
    关注

    I guess your question there is, even though you do out = &arr inside the function, how come arr in the caller is unchanged.

    out is a local variable in your function. You pass to the function &arr, so the value of out is the address of arr. And then you change the value of out to something else. This affects nothing outside the scope of this function. Reassigning the values of local variables never affects anything outside the scope of a function.

    It seems what you're trying to do is something like this:

    *out = arr
    

    That is, change the value where out is pointing.

    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
    ", &arr)
        A(&arr)
        fmt.Println(arr)
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?