Go问答 http 包中 forkReq 为什么是一个浅拷贝?

spf · 2020年12月21日 · 最后由 spf 回复于 2020年12月24日 · 177 次阅读
// forkReq forks req into a shallow clone of ireq the first
// time it's called.
forkReq := func() {
    if ireq == req {
        req = new(Request)
        *req = *ireq // shallow clone 
    }
}

req 和 ireq 已经是指向不同内存地址了,只是说值相同,修改其中一个不影响另外一个。 这不应该是符合深拷贝的定义吗? 如果这是浅拷贝那么这里该如何深拷贝?

更多原创文章干货分享,请关注公众号
  • 加微信实战群请加微信(注明:实战群):gocnio

浅拷贝只复制指针的值,深拷贝复制指针指向的对象。

eudore 回复

但这里是复制的指针指向的对象吧? 指针是 new 出来的新的

之所以成为浅拷贝,是因为对象内部还有引用类型 (指针、接口、function 等),当提前看连个对象已经是相等的了,但是如果 ireq 对象中的指针类型发生值的变化,req 会跟着变化。

qshuai 回复

应该是这么理解的多谢

spf 关闭了讨论 12月24日 09:44
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册