首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何访问接口中未定义的类型方法?

如何访问接口中未定义的类型方法?
EN

Stack Overflow用户
提问于 2018-02-14 19:45:06
回答 2查看 1.6K关注 0票数 1

我有一个接口,要求它的实现者有Click方法。但是,实现此接口的类型FakeTicker除了Click方法之外,还实现了Tick方法。

代码语言:javascript
复制
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未定义( Ticker类型没有字段或方法滴答)“

我知道这个接口只有方法Click(),但是既然FakeWriter正在实现这个接口,它难道不能调用它自己的方法Tick()吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-14 19:54:11

我知道这个接口只有方法Click(),但是既然FakeWriter正在实现这个接口,它难道不能调用它自己的方法Tick()吗?

由于clocker变量被定义为Ticker接口,所以只能在该接口上定义方法。如果要访问Tick方法,则必须更改为FakeTicker类型。

在这种情况下,您可以使用类型断言。

代码语言:javascript
复制
func main() {   
    var clocker Ticker    
    clocker = FakeTicker{"Val"}
    clocker.Click()
    fake := clocker.(FakeTicker)
    fake.Tick()    
}

您应该注意,如果您不使用带有两个返回类型(fake, ok := clocker.(FakeTicker))的版本,则当断言失败时,类型断言将引起恐慌。

票数 1
EN

Stack Overflow用户

发布于 2018-02-14 19:50:29

您需要将接口{}转换为FakeTicker

代码语言:javascript
复制
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"}
    fakeTicker := clocker.(FakeTicker)
    fakeTicker.Tick()
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48795043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档