Go 中的结构体实现接口:真的需要在定义中明确指定吗?
关于 go 中接口实现的疑问
在 go 语言中,通常需要在结构体定义中指定实现接口。然而,有人提出疑问,以下代码是否还算是实现了接口:
type Fruit interface { GetName() string } type Apple struct { name string } func (a Apple) GetName() string { return a.name } func main() { f := Apple{"Fuji"} fmt.Println(f.GetName()) } func main1() { a := Apple{"Gala"} fmt.Println(a.GetName()) }
在 main 函数中,通过接口类型给结构体变量赋值后,会进行接口检查。而 main1 函数中只是对结构体变量直接使用,没有涉及到接口检查。因此,main1 中并未实现接口。
go 语言采用隐式接口,实现接口的所有方法就实现了接口,无需在结构体定义中指明。在编译过程中,go 按需检查接口,即只有在使用接口时才会进行检查。
因此,上述 apple 结构体确实实现了 fruit 接口。
以上就是Go 中的结构体实现接口:真的需要在定义中明确指定吗?的详细内容,更多请关注其它相关文章!