You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go结构体底层机制与拷贝疑问:修改User内Address为何不影响原变量?

Go结构体拷贝与指针接收器的内存机制疑问

代码示例

func main() {
    a := Address{"Freedom", "Kyiv"}
    u := User{"Valeriy", "Zalyzhnyi", a}
    fmt.Println(a)
    fmt.Println(u)
    u.updateStreet("Peremohy")

    fmt.Println(a)
    fmt.Println(u)
}

func (u *User) updateStreet(street string) {
    u.address.street = street
}

type User struct {
    firstName string
    lastName  string
    address   Address
}

type Address struct {
    street string
    city   string
}

运行输出

{Freedom Kyiv}
{Valeriy Zalyzhnyi {Freedom Kyiv}}
{Freedom Kyiv}
{Valeriy Zalyzhnyi {Peremohy Kyiv}}

疑问点

我知道指针接收器方法会操作原User结构体,修改了u.address字段,但原Address变量a并未同步变化,说明u内的address与原a是不同对象。我原本以为指针接收器会同时操作原a和u,现想了解底层内存机制与结构体拷贝的具体过程。

内容的提问来源于stack exchange,提问作者Rostyslav Kholodnytskyi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 18:21:59