Fork me on GitHub

版权声明 本站原创文章 由 萌叔 发表
转载请注明 萌叔 | http://vearne.cc

前言

Golang很多语法特征都和C++非常相似, stuct对象的赋值操作,会导致struct被copy(浅拷贝)

test_copy.go

package main
import "fmt"

type Car struct{
    Name string
    Age int
    XList []int
}
func main(){
    a := Car{Name:"buick", Age: 10, XList:make([]int, 10)}
    b := a
    b.Age = 9
    fmt.Printf("address a:%p\n", &a)
    fmt.Printf("address b:%p\n", &b)
    fmt.Println("----------------------")
    fmt.Printf("Car a:%v\n", a)
    fmt.Printf("Car a:%v\n", len(a.XList))
    fmt.Printf("Car b:%v\n", b)
    fmt.Printf("Car b:%v\n", len(b.XList))
}

输出

address a:0xc420068180
address b:0xc4200681b0
----------------------
Car a:{buick 10 [0 0 0 0 0 0 0 0 0 0]}
Car a:10
Car b:{buick 9 [0 0 0 0 0 0 0 0 0 0]}
Car b:10

可以看出a和b已经是完全不同的对象,对b的修改不会影响a


如果我的文章对你有帮助,你可以给我打赏以促使我拿出更多的时间和精力来分享我的经验和思考总结。

微信支付码

发表评论

电子邮件地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据