由于 Go 非常強調(diào)接口,我想知道如何明確聲明一個結(jié)構(gòu)正在實現(xiàn)一個接口,以便在某些方法丟失的情況下進行清晰和錯誤檢查?到目前為止,我已經(jīng)看到了兩種方法,我想知道哪種方法是正確的并且符合 Go 規(guī)范。方法 1 - 匿名字段type Foo interface{ Foo()}type Bar struct { Foo}func (b *Bar)Foo() {}方法 2 - 顯式轉(zhuǎn)換type Foo interface{ Foo()}type Bar struct {}func (b *Bar)Foo() {}var _ Foo = (*Bar)(nil)這些方法是正確的,還是有其他方法可以做這樣的事情?
3 回答

慕哥9229398
TA貢獻1877條經(jīng)驗 獲得超6個贊
我很少需要聲明這一點,因為在我的包中幾乎總是有我使用結(jié)構(gòu)體作為接口的地方。我傾向于遵循在可能的情況下保持結(jié)構(gòu)不公開的模式,并且僅通過“構(gòu)造函數(shù)”函數(shù)提供它們。
type Foo interface{
Foo()
}
type bar struct {}
func (b *bar)Foo() {}
func NewBar() Foo{
return &bar{}
}
如果bar不滿足Foo,則不會編譯。我沒有添加構(gòu)造來聲明該類型實現(xiàn)了接口,而是確保我的代碼在某個時候?qū)⑺米鹘涌凇?/p>

梵蒂岡之花
TA貢獻1900條經(jīng)驗 獲得超5個贊
你不能。在 Go 中,所有接口實現(xiàn)都是隱式的。你可以檢查一個類型是否實現(xiàn)了一個接口(這是它得到的最明確的)。如果我在我從事的項目中沒有記錯的話,我們只是在包的頂部針對類型實現(xiàn)的接口做了一些類型斷言,這與它所得到的一樣接近顯式。
- 3 回答
- 0 關(guān)注
- 240 瀏覽
添加回答
舉報
0/150
提交
取消