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
相关产品推荐
相关产品推荐

