gpt4 book ai didi

linux - 将结构体实例重新声明为相同的变量名将返回 golang 中的旧对象

转载 作者:太空宇宙 更新时间:2023-11-04 05:56:50 24 4
gpt4 key购买 nike

我正在尝试创建一堆结构实例并在设置一些值后附加到列表中。这是重用变量。这不起作用,因为事实证明 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)

}

你好, Playground &{10} p: 0x40e020 你好, Playground &{12} p: 0x40e02c

https://play.golang.org/p/58qP6ggV5K8

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

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