亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從另一個包導入結構時的私有嵌入結構

從另一個包導入結構時的私有嵌入結構

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 關注
  • 161 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號