为了账号安全,请及时绑定邮箱和手机立即绑定

从另一个包导入结构时的私有嵌入结构

从另一个包导入结构时的私有嵌入结构

Go
蛊毒传说 2021-11-22 18:55:47
我有一个项目依赖于从另一个包导入的结构,我将称之为TheirEntity.在下面的示例中,我(咳咳)嵌入TheirEntity了MyEntity,它是 的扩展TheirEntity,具有附加功能。但是,我不想TheirEntity在MyEntity结构中导出,因为我宁愿消费者不TheirEntity直接访问。我知道 Go 嵌入与经典 OOP 中的继承不同,所以这可能不是正确的方法,但是是否可以将嵌入的结构指定为“私有”,即使它们是从另一个包导入的?如何以更惯用的方式实现同样的事情?// TheirEntity contains functionality I would like to use...type TheirEntity struct {    name string}func (t TheirEntity) PrintName() {    fmt.Println(t.name)}func NewTheirEntity(name string) *TheirEntity {    return &TheirEntity{name: name}}// ... by embedding in MyEntitytype MyEntity struct {    *TheirEntity // However, I don't want to expose                  // TheirEntity directly. How to embed this                 // without exporting and not changing this                 // to a named field?    color        string}func (m MyEntity) PrintFavoriteColor() {    fmt.Println(m.color)}func NewMyEntity(name string, color string) *MyEntity {    return &MyEntity{        TheirEntity: NewTheirEntity(name),        color:       color,    }}
查看完整描述

2 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

[I] 是否可以将嵌入式结构指定为“私有”,即使它们是从另一个包导入的?

不。

如何以更惯用的方式实现同样的事情?

通过不嵌入但使其成为未导出的命名字段。


查看完整回答
反对 回复 2021-11-22
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

像这样:


type MyEntity struct {

    *privateTheirEntity

}


type privateTheirEntity struct {

    *TheirEntity

}


查看完整回答
反对 回复 2021-11-22
  • 2 回答
  • 0 关注
  • 135 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信