2 回答

TA貢獻1853條經驗 獲得超9個贊
我可以覆蓋文件 B.go 中接口函數的邏輯嗎?
不,Go(和其他語言)中的接口沒有任何邏輯或實現。
在 Go 中實現一個接口,我們只需要實現接口中的所有方法即可。
A 和 B 類型如何實現具有不同邏輯的相同接口:
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貢獻1828條經驗 獲得超3個贊
函數是 Go 中的第一類值,就像它們在 JavaScript 中一樣。您在這里不需要界面(除非您沒有說明其他目標):
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")
}
由于所有類型都可以有方法,所以所有類型(包括函數類型)都可以實現接口。所以如果你真的想要,你可以讓 A 依賴于一個接口并定義一個函數類型來提供即時實現:
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 關注
- 146 瀏覽
添加回答
舉報