关于 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 中的结构体实现接口:真的需要在定义中明确指定吗?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号