我试图创建一堆struct实例,并在设置一些值后追加到列表。这是在重用变量。这没有用,因为事实证明golang返回了相同的对象。这违反了我的预期。行为有任何依据吗?解决办法是什么。以下是goplayground的代码段。

package main

import (
    "fmt"
)

type a struct {
I int
}

func main() {
b := new(a)

b.I = 10
fmt.Printf("Hello, playground %v p: %p", b, &b)

b = new(a)
b.I = 12
fmt.Printf(" Hello, playground %v p: %p", b, &b)

}

这是输出:
Hello, playground &{10} **p: 0x40c138** Hello, playground &{12} **p: 0x40c138**

最佳答案

在您的示例中,您正在打印变量b的地址,而不是值

尝试这个:

package main

import (
    "fmt"
)

type a struct {
    I int
}

func main() {
    b := &a{}

    b.I = 10
    fmt.Printf("Hello, playground %v p: %p", b, b)

    b = &a{}
    b.I = 12
    fmt.Printf(" Hello, playground %v p: %p", b, b)

}
Hello, playground &{10} p: 0x40e020 Hello, playground &{12} p: 0x40e02c
https://play.golang.org/p/58qP6ggV5K8

关于linux - 将结构实例重新声明为相同的变量名称将在golang中返回旧对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60271707/

10-11 07:16