登录
首页 >  Golang >  Go问答

如何知道某个接口的某个功能没有实现?

来源:stackoverflow

时间:2024-04-17 23:36:30 335浏览 收藏

今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《如何知道某个接口的某个功能没有实现?》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大家一起进步,一起学习!

问题内容

我刚刚在 go 中尝试了以下代码。

package main

type inter interface {
    aaa() int
}

type impl struct {
    inter
}

func main() {
    var a inter
    a = impl{}
    // how to check the function for interface `inter` is not realized?
    a.aaa()
}

它可以是 go buildgo run。但会收到类似这样的恐慌:

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0xffffffff addr=0x0 pc=0x8972c]

goroutine 1 [running]:
main.(*impl).aaa(0x40c018, 0x41a788, 0xb2ae0, 0x40c018)
    :1 +0x2c
main.main()
    /tmp/sandbox029518300/prog.go:15 +0x60

我怎么知道a.aaa()没有实现。


解决方案


变量a的类型为inter,一个接口,它指向一个impl。结构体 impl 中嵌入了 inter 接口。这意味着impl.aaa()存在,这实际上意味着impl.inter.aaa()。但是在您的代码中 impl.inter 为零。为了更清楚地说明:

b:=impl{}
var a inter
a=b
a.aaa() // this will call b.inter.aaa(), but b.inter is nil

今天关于《如何知道某个接口的某个功能没有实现?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>