将结构实例重新声明为相同的变量名称会在 golang 中返回旧对象
redeclaring a struct instance to same variable name is returning old object in golang
我正在尝试创建一堆结构实例并在设置一些值后附加到列表中。这是重用变量。这不起作用,因为事实证明 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
我正在尝试创建一堆结构实例并在设置一些值后附加到列表中。这是重用变量。这不起作用,因为事实证明 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