【发布时间】:2018-02-14 19:45:06
【问题描述】:
我的接口要求其实现者具有 Click 方法。 但是实现这个接口的FakeTicker类型除了Click方法外,还实现了Tick方法。
package main
type Ticker interface{
Click() string
}
type FakeTicker struct{
val string }
func (f FakeTicker) Click() string {
return f.val
}
func (f FakeTicker) Tick() int { return 1 }
func main() {
var clocker Ticker
clocker = FakeTicker{"Val"}
clocker.Tick()
}
这里出现以下错误“clocker.Tick undefined (type Ticker has no field or method Tick)”
我知道接口只有方法 Click() 但由于 FakeWriter 正在实现接口, 不应该可以调用自己的方法Tick()吗?
【问题讨论】:
-
@p-ray "不应该可以调用自己的自己的方法Tick()吗?"应该可以而且也可以能够。错误不是来自 it 无法调用
Tick而是来自clocker的“用户” 无法调用Tick。 -
@mkopriva 正如接受的答案中提到的,我认为它需要转换为实现结构。
-
我的评论的意思是
FakeTicker可以调用它的 ownTick方法,例如从它的 own @ 内部987654327@ 方法。func (f FakeTicker) Click() string { f.Tick(); return f.val }。我只是在这里有点迂腐,请随意忽略我。
标签: go go-interface