gpt4 book ai didi

go - 用新值覆盖现有值

转载 作者:数据小太阳 更新时间:2023-10-29 03:45:44 24 4
gpt4 key购买 nike

请看下面的代码片段。

package main

import (
"fmt"
)

type class struct {
prop1 string
prop2 string
}

func main() {

va1 := &class{"Hello", "Foo"}
fmt.Println(&va1)
va1 = &class{"TOO", "Boo"}
fmt.Println(&va1)

}

结果我得到了相同的指向地址。

0x1215a0c0
0x1215a0c0

使用 &T{} 它将分配新的零值地址。但为什么在这里我有相同的地址?我是否只是在第二次赋值时覆盖该值?

最佳答案

声明

fmt.Println(&va1)

打印变量 va1 的地址,而不是 va1 指向的地址。变量地址不变。

试试这个程序:

va1 := &class{"Hello", "Foo"}
fmt.Printf("&va1: %v, pointer: %p, value: %v\n", &va1, va1, va1)

va2 := va1
va1 = &class{"TOO", "Boo"}

fmt.Printf("&va1: %v, pointer: %p, value: %v\n", &va1, va1, va1)
fmt.Printf("&va2: %v, pointer: %p, value: %v\n", &va2, va2, va2)

这个程序打印:

&va1: 0x1030e0c0, pointer: 0x10328000, value: &{Hello Foo}
&va1: 0x1030e0c0, pointer: 0x10328050, value: &{TOO Boo}
&va2: 0x1030e0d0, pointer: 0x10328000, value: &{Hello Foo}

请注意,变量 va1 的地址不会改变,但 va1 指向的内容会改变。此外,指向 va1 的指针赋值不会修改指向 va1 的值。

关于go - 用新值覆盖现有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25810825/

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