登录
首页 >  Golang >  Go问答

关于上下文包中 Golang 嵌入接口字段分配的混乱

来源:stackoverflow

时间:2024-04-26 18:09:26 404浏览 收藏

本篇文章给大家分享《关于上下文包中 Golang 嵌入接口字段分配的混乱》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

当我阅读context包源代码时,我发现context结构体中有一个context接口字段。在 newcancelctx 方法中,它将 parent 参数分配给 cancelctx.context。 我很困惑这样的作业是软拷贝还是深层拷贝? struct cancelctx 中的 context 字段是否保存指向 parent 接口的指针?

// Canceling this context releases resources associated with it, so code should
// call cancel as soon as the operations running in this Context complete.
func WithCancel(parent Context) (ctx Context, cancel CancelFunc) {
    c := newCancelCtx(parent)
    propagateCancel(parent, &c)
    return &c, func() { c.cancel(true, Canceled) }
}

// newCancelCtx returns an initialized cancelCtx.
func newCancelCtx(parent Context) cancelCtx {
    return cancelCtx{Context: parent}
}

解决方案


接口包含指向基础数据项和类型的指针。当您将值分配给接口时,您会分配两个值:指向该值的指针(或指向该值副本的指针)和类型。所以,它不是深复制。

您测试代码在第一种情况下打印 a ,在第二种情况下打印 b.impl ,我猜这就是输出看起来令人困惑的原因。对于第二种情况,打印 b ,它应该是显而易见的。

本篇关于《关于上下文包中 Golang 嵌入接口字段分配的混乱》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>