28|接口:接口即契约
该思维导图由 AI 生成,仅供参考
- 深入了解
- 翻译
- 解释
- 总结
Go语言的接口类型是该语言核心语法的重要组成部分,代表了Go语言在编程语言领域的创新。文章介绍了接口类型的定义规范,包括方法集合的声明、空接口类型的特殊情况以及类型断言的语法形式。强调了接口类型的重要性,以及在实际编码过程中的应用。文章指出,Go语言倾向于定义“小接口”,即方法个数在1~3个之间的接口,这种做法有助于降低耦合度、提高抽象程度,并易于实现、测试和复用组合。通过对小接口的青睐,Go语言在标准库和社区项目中体现出了对这一编码规范的广泛采用。总的来说,本文通过对接口类型的定义和应用进行深入讨论,为读者系统地学习Go语言的接口类型提供了基础。文章内容涵盖了接口类型的基础知识、定义规范以及在实践中的应用,强调了Go语言推崇定义小接口的编码规范,并提供了循序渐进地抽象出小接口的步骤。通过本文,读者可以全面了解Go语言接口类型的重要性和应用方法,为他们在实际编程中更好地运用接口类型提供了指导和启发。
《Tony Bai · Go 语言第一课》,新⼈⾸单¥59
全部留言(26)
- 最新
- 精选
- Calvingo1.18 增加了 any 关键字,用以替代现在的 interface{} 空接口类型:type any = interface{},实际上是 interface{} 的别名。
作者回复: 👍
2021-12-2538 - 罗杰接口的目的是为了解耦,关于接口在项目还用的非常非常少,几乎没有定义过接口,有点惭愧。
作者回复: 慢慢来。
2021-12-2415 - Sid为什么这里的Type不是Myinterface而是nil呢?
作者回复: 可以这样理解: i = int64(13) v2, ok := i.(MyInterface) // 由于i的动态类型是int64,所以这行类型断言失败。那么v2虽然静态类型为MyInterface,但其动态类型的值为nil。 而fmt.Printf结合T%输出的是接口类型变量的动态类型的类型信息,所以输出nil。
2022-01-19412 - 菠萝吹雪—Code思考题 1、如果 Go 中没有接口类型,会发生什么,会对我们的代码设计产生怎样的影响? (1)代码会产生严重的耦合,系统的扩展性会变低,时间长了代码会变得冗余难以维护 (2)有接口类型可能在代码阅读上产生一定的难度 2、关于尽量定义小接口,你有什么好方法? 随着系统的演进,不断的抽象、提取
作者回复: 大大的👍
2022-08-22归属地:北京8 - 邵康我是一个Java程序员,原来面对不完美的接口可以直接修改接口,然后很容易找到并修改它的实现类,但是go中,遇到需要修改接口时,很难找到它的全部实现类并修改,有什么好办法吗?
作者回复: 我个人用vim编辑器,目前还没找到什么好插件可以搜索到某个接口的所有实现类型。不知道其他编辑器,比如vscode、goland是否有这类功能。 一个比较粗糙的方法就是:先修改接口,然后编译一遍程序,根据go compiler提供的error信息找到那些实现类型,然后逐一改之(手动允悲)。
2022-06-0247 - singularity of space time读完了go的接口概念以及接口的实现基于方法集合之后有个问题,就是按老师之前说的go的一大理念就是显式,不支持隐式的转化,但是到了接口这里,相较于java实现对应接口时会直接implement对应的接口的语法而言,个人感觉go接口的实现不免显得过于隐式了,而且接口和实现的分离本身已经是很大程度上的解耦合了,真的有必要像go这样将实现者连实现了谁这样的耦合关系也隐藏起来嘛?
作者回复: 文中的“隐式”更多是因为接口与Go语言其他部分是正交的关系,建议先看完第30讲。
2022-01-304 - Demon.Lee请假老师一个接口名字的大小写问题:我看 type error intereface{...} 这里用小写字母开头,而 io.Reader 则是 type Reader interface{...} 大写字母开头,我测试了一下,这个大小写并不影响实现,我在 A 包里面定义的接口,在 B 包里面实现对应的方法没有问题(当然,方法是 exported 的)。所以,这个接口名称定义最佳实践是什么,混着用?
作者回复: error这个接口是特殊的。它是Go预定义的接口,可以不用考虑导出不导出,在哪里都可以使用。 但是我们自定义的接口类型,如果要在包外访问,则必须是头母大写的导出标识符。
2022-07-0523 - lesserror请问一下大白老师,一般错误输出的堆栈中都有类似这样的信息:main.go:20 +0x22d,请问像类似 +0x22d 这样的字符 代表的是什么呢?
作者回复: 这个值好像是该函数在栈帧(stack frame)中的相对位置。
2021-12-253 - AlexWillBeGood反射和接口还有即将加入的泛型都可以实现抽象,增加了代码的灵活性
作者回复: 👍。
2021-12-243 - Soyoger小接口契约和抽象体现了抽象的一般过程:穷举、归纳、抽象。
作者回复: 👍
2022-10-14归属地:北京2