Go 中的结构体实现接口:真的需要在定义中明确指定吗?

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 中的结构体实现接口:真的需要在定义中明确指定吗?的详细内容,更多请关注其它相关文章!