go-修改切片的指针不会修改原始的

时间:2019-04-17 13:55:50

标签: pointers go

我尝试创建一个结构,其中一个字段是指向现有空切片的指针。然后,我修改struct的字段,然后尝试从原始切片中获取新内容-但它仍然为空!

这是演示代码:

package main

import (
    "fmt"
)

type A struct {
    B []int
}

func main() {
    c := []int{}

    a := &A{
        B: c,
    }

    a.B = append(a.B, 5)

    fmt.Println(c)
    fmt.Println(a)
}

这里的结果是:

[]
&{[5]}

问题是-如何从原始切片和struct的字段中获取实际的切片内容?我没有将切片作为参数传递给函数。

1 个答案:

答案 0 :(得分:1)

您可以像下面的示例一样使用切片指针:

package main

import (
    "fmt"
)

type A struct {
    B *[]int
}

func main() {
    c := []int{}

    a := &A{
        B: &c,
    }

    *a.B = append(*a.B, 4)
    *a.B = append(*a.B, 5)

    fmt.Println(c)

    fmt.Println(a.B)
}

结果 The result is