Go 语言中,结构体未显式实现接口,是否算实现了接口?

go 语言中,结构体未显式实现接口,是否算实现了接口?

go 语言中隐式实现接口的机制

在 go 语言中,有关接口实现的问题引发了讨论。本文将重点介绍问题和答案,以阐明隐式接口实现的机制。

问题:像以下代码所示,仅定义结构体而并未显式实现接口,是否也算实现了接口?

type Apple struct {
    name string
}

func (a Apple) GetName() string { return a.name }

答案:

go 语言采用了隐式接口实现机制,这意味着只要实现了接口所有方法的结构体就默认实现了该接口。因此,代码中的 apple 结构体虽然没有显式声明实现 fruit 接口,但只要它实现了该接口中的 getname 方法,就隐式实现了该接口。

go 编译器仅在需要使用接口时进行接口检查,例如将变量赋值为接口类型时或传递给接受接口类型作为参数的函数时。对于 main1 函数,因为它未涉及接口检查,因此不存在是否实现了接口的问题。而 main 函数中,将 f 的类型指定为 fruit 接口,编译器将在运行时检查 apple 结构体是否实现了该接口。

结论

  • apple 结构体实现了 fruit 接口,无论是否显式声明实现。
  • main1 函数中不存在接口检查,而 main 函数中存在接口检查。

以上就是Go 语言中,结构体未显式实现接口,是否算实现了接口?的详细内容,更多请关注其它相关文章!