我试图在Go中键入asserse,但错误说struct没有实现接口方法,但我已经清楚地实现了在接口中声明的方法。这是我尝试执行的代码package interfacesimport "fmt"type Event interface { Accept()}type Like struct {}// Like implement Accept method from Event interfacefunc (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)}
1 回答
慕仙森
TA贡献1827条经验 获得超8个赞
请注意,除了《迪斯科赞美诗》所建议的之外,我们还可以修改您的示例(我已将其更改为并在Go Playground上使用),而不是:package mainfunc main
func (l *Like) Accept) {
// code
}
我们有:
func (l Like) Accept() {
// code
}
然后代码将编译。但是因为包含 一个实例,而不是 一个,则检验:e*LikeLike
_, f := e.(Like)
fmt.Println(f)
立即打印。请参阅此处的完整示例。false
何时以及是否使用指针接收器的问题是一个非常基本的问题,并且在Go Tour中得到了很好的解决,尽管没有明确说明。FAQ以更紧凑的形式具有相同的信息,并在第二部分中提供了一些明确的详细信息。另请参阅值接收器与指针接收器。
- 1 回答
- 0 关注
- 100 浏览
添加回答
举报
0/150
提交
取消
