知识卡片

接口靠隐式满足而非声明实现

专业/工作 · 1373

内容

Go 的接口只是”一组方法签名”的声明,一个具体类型只要恰好实现了接口要求的全部方法,就自动 满足这个接口,可以被赋值给接口类型的变量或传给接受该接口的函数——不需要像很多语言那样在类 定义处写一句”implements 某接口”来显式声明这层关系。发散:这把”这个类型能做什么”和”这个类型是 什么”彻底解耦——接口的定义权因此更适合放在消费方而不是提供方,因为不同调用者可能只需要同一 个类型的一小。

参考来源

- 位置:《Head First Go语言程序设计》第11章《你能做什么:接口》(源文件:_epub-src/index_split_002.html) - 结论依据:原文在该章节围绕“Go的接口只是"一组方法签名"的声明,一个具体类型只要恰好实现了接口要求的全部方法,就自动满足这个接口,可以被…”给出定义、示例或限制条件;摘录中的术语、代码片段或对比关系直接支撑本卡片的结论。 - 原始内容:,返回一个error值。如果合法,我们将会正常设置Date struct字 段,并且返回nil作为错误值。 让我们首先对SetYear方法增加校验。我们修改方法的声明,增加 一个error类型的返回值。在方法块的开始处,我们测试调用者传入的 year参数是否小于1。如果是,我们返回一个带着信息"invalid year"的 error。如…