已关闭,此问题需要details or clarity。它目前不接受回答。
**想改善这个问题吗?**通过editing this post添加详细信息并澄清问题。
上个月关门了。
Improve this question
下面的代码给出了runtime error: invalid memory address or nil pointer dereference
,好奇为什么要输入if子句,以及如果if验证了没有“实现”的函数,那么在go中实现接口的意义是什么。Media
中的Module
关键字在其自身中创建了属性Module
,该属性似乎充当了struct的属性,但也继承了其功能。
package main
type Module interface {
Init()
}
type Media struct {
Module // <- Why?
}
// func (m *Media) Init() {}
func main() {
var v any = &Media{}
if module, isModule := v.(Module); isModule {
module.Init()
}
}
1条答案
按热度按时间wnvonmuf1#
为了让类型T实现接口I,T必须定义I的所有方法。你所做的是将I嵌入T,所以实际上你在
Media
中定义了一个Module
类型的成员变量。由于嵌入,类型Module
实现了Media
,但字段Media
是nil,因为它从未被初始化。实现
Media
的正确方法是:在此之后,
*Media
实现了Module
。