第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

為什么要在 golang 中使用組合?

為什么要在 golang 中使用組合?

Go
蕪湖不蕪 2022-01-04 18:55:40
在下面的代碼中,我展示了我認(rèn)為在 golang 中嵌入(方法得到提升的地方)和組合(方法沒有得到提升的地方)之間的區(qū)別。為什么要在 golang 中使用組合?type obj1Inherited struct {    obj2}type obj1Composed struct {    someobj obj2}type obj2 struct {}func (o obj2) printTest() {    fmt.Println("obj2")}func main() {    o := obj1Inherited{}    o.printTest() //fine - printTest is promoted    obj1Composed := obj1Composed{}    obj1Composed.someobj.printTest() //fine because I'm using the composed obj    obj1Composed.printTest() //not fine - printTest is NOT promoted
查看完整描述

3 回答

?
慕俠2389804

TA貢獻(xiàn)1719條經(jīng)驗(yàn) 獲得超6個(gè)贊

值得仔細(xì)閱讀有關(guān)嵌入Effective Go的部分。


一個(gè)常見的例子是有一個(gè)帶有互斥體的結(jié)構(gòu)/映射。


type SafeStruct struct {

    SomeField string 

    *sync.Mutex

}

打字要容易得多


safe := SafeStruct{SomeField: "init value"}


safe.Lock()

defer safe.Unlock()

safe.SomeField = "new value"

而不是必須編寫適當(dāng)?shù)陌b函數(shù)(這是重復(fù)的)或有口吃


safe.mutex.Unlock()

當(dāng)你將永遠(yuǎn)做互斥領(lǐng)域的唯一事情就是訪問方法(Lock()和Unlock()在這種情況下)


當(dāng)您嘗試在嵌入式字段上使用多個(gè)函數(shù)(實(shí)現(xiàn)類似 的接口io.ReadWriter)時(shí),這會(huì)變得更加有用。


查看完整回答
反對(duì) 回復(fù) 2022-01-04
?
精慕HU

TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個(gè)贊

我將嘗試回答原始問題 - 有時(shí)人們使用“組合”而不是嵌入來隱藏嵌入結(jié)構(gòu)的功能。不是一個(gè)很好的用例 - 但人們有時(shí)更喜歡它。


type Obj1composed struct {

  notExportedObj1 obj1

}


func NewObj1Composed(someParam Params) Obj1composed {

...

}


func (o Obj1Composed) Print() {

  // Some heavy calculations here. Make Dozens of API calls

  // print some data

}


查看完整回答
反對(duì) 回復(fù) 2022-01-04
?
慕容708150

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超4個(gè)贊

在您的示例中,我還想針對(duì)第一種情況介紹一點(diǎn)。如果obj1Inheritedobj2具有相同名稱的方法,則該方法調(diào)用(來自obj1Inherited實(shí)例)將始終執(zhí)行obj1Inherited方法。

要調(diào)用obj2方法,您可以使用不推廣的其他方法


查看完整回答
反對(duì) 回復(fù) 2022-01-04
  • 3 回答
  • 0 關(guān)注
  • 147 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)