在go中实现接口的意义是什么?[已关闭]

cgh8pdjw  于 2023-09-28  发布在  Go
关注(0)|答案(1)|浏览(87)

已关闭,此问题需要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()
    }
}
wnvonmuf

wnvonmuf1#

为了让类型T实现接口I,T必须定义I的所有方法。你所做的是将I嵌入T,所以实际上你在Media中定义了一个Module类型的成员变量。由于嵌入,类型Module实现了Media,但字段Media是nil,因为它从未被初始化。
实现Media的正确方法是:

type Media struct {
}

// This implements the Module.Init() method
func (m *Media) Init() {
}

在此之后,*Media实现了Module

相关问题