我有簡單的 Go 代碼:
type MyInterface interface {
Do()
}
type Doer struct{}
func (d *Doer) Do() {}
// Option 1
var _ MyInterface = (*Doer)(nil)
// Option 2
var _ MyInterface = &Doer{}
與選項 2 相比,使用選項 1(在任何地方都廣泛使用和建議)強制執行介面的缺點是什么?
如果我們丟棄結果,實體化一個真實的物件而不是指標有什么危害?
我知道選項 2 可能慢一毫秒,因為它為結構分配記憶體,并且 GC 可能還有一毫秒時間來清理它,但所有這些都只在啟動時發生,不會影響運行時。
這些是我的正確還是我錯過了什么?
uj5u.com熱心網友回復:
問題中的分析很好。這里補充兩點:
選項 1 適用于任何型別。選項 2 僅適用于具有復合文字語法的型別。
下面是一個例子:
type IntDoer int
func (d *IntDoer) Do() {}
// Option 1
var _ MyInterface = (*IntDoer)(nil)
// Option 2 DOES NOT COMPILE
var _ MyInterface = &IntDoer{}
選項 2 可能沒有任何運行時損失。編譯器可能會優化分配。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/343551.html
上一篇:為什么在我的Go代碼中忽略MinVersion標志?
下一篇:從go-ethereum實作EthereumPersonal_sign(EIP-191)給出了與ethers.js不同的簽名
