我们可以在 Go 中使用类型断言和接口方法吗?

我试图在Go中键入asserse,但错误说struct没有实现接口方法,但我已经清楚地实现了在接口中声明的方法。


这是我尝试执行的代码


package interfaces


import "fmt"


type Event interface {

    Accept()

}


type Like struct {

}


// Like implement Accept method from Event interface

func (l *Like) Accept() {

  fmt.Println("like accept")

}


func TypeAssertionExample() {

 var l *Like = &Like{}

 var e Event = l

 _, f := e.(Like) // error even after Like implemented Accept method 

 fmt.Println(f)

}


拉丁的传说
浏览 101回答 1
1回答

慕仙森

请注意,除了《迪斯科赞美诗》所建议的之外,我们还可以修改您的示例(我已将其更改为并在Go Playground上使用),而不是:package mainfunc mainfunc (l *Like) Accept) {    // code}我们有:func (l Like) Accept() {    // code}然后代码将编译。但是因为包含 一个实例,而不是 一个,则检验:e*LikeLike_, f := e.(Like)fmt.Println(f)立即打印。请参阅此处的完整示例。false何时以及是否使用指针接收器的问题是一个非常基本的问题,并且在Go Tour中得到了很好的解决,尽管没有明确说明。FAQ以更紧凑的形式具有相同的信息,并在第二部分中提供了一些明确的详细信息。另请参阅值接收器与指针接收器。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go