2 回答

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超9個(gè)贊
我可以覆蓋文件 B.go 中接口函數(shù)的邏輯嗎?
不,Go(和其他語(yǔ)言)中的接口沒(méi)有任何邏輯或?qū)崿F(xiàn)。
在 Go 中實(shí)現(xiàn)一個(gè)接口,我們只需要實(shí)現(xiàn)接口中的所有方法即可。
A 和 B 類型如何實(shí)現(xiàn)具有不同邏輯的相同接口:
type Doer interface {
Do(string)
}
type A struct {
name string
}
func (a *A) Do(name string){
a.name = name;
// do one thing
}
type B struct {
name string
}
func (b *B) Do(name string){
b.name = name;
// do another thing
}

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
函數(shù)是 Go 中的第一類值,就像它們?cè)?JavaScript 中一樣。您在這里不需要界面(除非您沒(méi)有說(shuō)明其他目標(biāo)):
type A struct {
name string
callback func()
}
func (a *A) DoSomeThingWithName(name string){
a.name = name;
a.callback()
}
func main() {
a := &A{
callback: func() { /* ... */ },
}
a.DoSomeThingWithName("KimKim")
}
由于所有類型都可以有方法,所以所有類型(包括函數(shù)類型)都可以實(shí)現(xiàn)接口。所以如果你真的想要,你可以讓 A 依賴于一個(gè)接口并定義一個(gè)函數(shù)類型來(lái)提供即時(shí)實(shí)現(xiàn):
type Doer interface {
Do()
}
// DoerFunc is a function type that turns any func() into a Doer.
type DoerFunc func()
// Do implements Doer
func (f DoerFunc) Do() { f() }
type A struct {
name string
callback Doer
}
func (a *A) DoSomeThingWithName(name string) {
a.name = name
a.callback.Do()
}
func main() {
a := &A{
callback: DoerFunc(func() { /* ... */ }),
}
a.DoSomeThingWithName("KimKim")
}
- 2 回答
- 0 關(guān)注
- 151 瀏覽
添加回答
舉報(bào)