请问一下,关于go中接口的这样也算实现接口吗?

作者站长头像
站长
· 阅读数 11

请问一下,关于go中接口的这样也算实现接口吗?请问下,像main1这种还算是实现了接口吗【好像完全没有用到接口的定义】?正常来说的话,像main才算实现了接口请问一下,关于go中接口的这样也算实现接口吗?

回复
1个回答
avatar
test
2024-07-11

解释

Go 语言是隐式接口,实现接口的所有方法就实现了接口,而无需在结构体定义中指明:

// 无需类似这样显式声明实现 Fruit 接口(以下非合法语法)
type Apple struct implements Fruit {
    name string
}

且 Go 在编译过程中对接口是按需检查的,即你使用接口时,才检查你是否实现了接口(比如声明函数参数、变量赋值时)。

你列出的 main1 中只是一个对结构体的使用,不涉及到接口检查;而 main 中将 f 的类型定为接口 Fruit ,会进行接口检查。

结论

  1. 结构体 Apple 实现了 Fruit 接口;
  2. main1 中未涉及到对接口的检查,main 中涉及到了对接口的检查。

参考资料:4.2 接口 (《Go 语言设计与实现》)

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容