我有簡單的 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 可能沒有任何運行時損失。編譯器可能會優化分配。
- 1 回答
- 0 關注
- 99 瀏覽
添加回答
舉報
0/150
提交
取消