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

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

Go中的接口實現強制

Go中的接口實現強制

Go
慕虎7371278 2022-10-10 17:50:38
我有簡單的 Go 代碼:type MyInterface interface {    Do()}type Doer struct{}func (d *Doer) Do() {}// Option 1var _ MyInterface = (*Doer)(nil)// Option 2var _ MyInterface = &Doer{}與選項 2 相比,使用選項 1(在任何地方都被廣泛使用和建議)強制執行接口的缺點是什么?如果我們丟棄結果,實例化一個真實對象而不是指針有什么害處?我知道選項 2 可能慢了一毫秒,因為它為結構分配內存,而且 GC 可能還有一毫秒的時間來清理它,但所有這些都只在啟動時發生,不會影響運行時。這些是我的正確還是我錯過了什么?
查看完整描述

1 回答

?
慕田峪4524236

TA貢獻1875條經驗 獲得超5個贊

題主的分析很好。這里還有兩點:


選項 1 適用于任何類型。選項 2 僅適用于具有復合文字語法的類型。


這是一個例子:


type IntDoer int


func (d *IntDoer) Do() {}


// Option 1

var _ MyInterface = (*IntDoer)(nil)


// Option 2 DOES NOT COMPILE

var _ MyInterface = &IntDoer{} 

選項 2 可能沒有任何運行時損失。編譯器可能會優化分配。


查看完整回答
反對 回復 2022-10-10
  • 1 回答
  • 0 關注
  • 99 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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