为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
拉丁的传说 2022-09-05 10:40:13
我试图在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以更紧凑的形式具有相同的信息,并在第二部分中提供了一些明确的详细信息。另请参阅值接收器与指针接收器。


查看完整回答
反对 回复 2022-09-05
  • 1 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号