登录
首页 >  Golang >  Go问答

匿名结构的组合与继承

来源:stackoverflow

时间:2024-04-27 17:21:34 119浏览 收藏

欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《匿名结构的组合与继承》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

问题内容

我正在阅读这张幻灯片,上面写着:

var hits struct {
    sync.Mutex
    n int
}

hits.Lock()
hits.n++
hits.Unlock()

这到底是如何运作的?看起来 hits 不是由互斥体和整数组成,而是由互斥体和整数组成?


解决方案


这是构图。使用匿名字段(嵌入字段),包含的结构体将具有嵌入类型的值,您可以参考它:非限定类型名称充当字段名称。

所以你可以轻松地写:

hits.Mutex.Lock()
hits.n++
hits.Mutex.Unlock()

当您嵌入类型时,嵌入类型的字段和方法会被提升,因此您可以在不指定字段名称(即嵌入类型名称)的情况下引用它们,但这只是语法糖。引用自Spec: Selectors:

除了字段/方法提升之外,嵌入类型的method set还将包含嵌入类型的方法集。引用自Spec: Struct types:

这不是 oop 意义上的继承,而是类似的东西。当您想要实现接口时,这会很方便:如果您嵌入一个已经实现该接口的类型,那么您的结构类型也会如此。您还可以提供自己的某些方法的实现,这给人一种方法重写的感觉,但一定不要忘记,表示嵌入类型的方法的选择器将获取嵌入值作为接收者(而不是嵌入器值),并且表示在结构类型上定义的方法的选择器(可能会或可能不会“隐藏”嵌入类型的方法)将获得嵌入器结构值作为接收器。

理论要掌握,实操不能落!以上关于《匿名结构的组合与继承》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

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