如果接口只有一个方法,我应该使用函数类型吗?
以下是这两种方法的示例:
type Delegate interface { | type Delegate func(x int) int
Do(x int) int |
} |
|
type App struct { | type App struct {
delegate Delegate | delegate Delegate
} | }
|
func (this *App) foo() { | func (this *App) foo() {
... | ...
y := this.delegate.Do(x) | y := this.delegate(x)
... | ...
} | }
|
func main() { | func main() {
delegate := &DelegateImpl{} | delegate := &DelegateImpl{}
app := &App{delegate} | app := &App{delegate.Process}
... | ...
} | }
测试:
type FakeDelegate { |
t *testing.T |
expectedX int |
result int |
} |
|
func (this *FakeDelegate) Do(x int) int { |
require.Equal(t, this.expectedX, x) |
return this.result |
} |
|
看起来右边的代码(带有函数类型)的行数较少,尤其是在测试方面。但就没有什么陷阱吗?
慕丝7291255
幕布斯6054654
相关分类