Golang接口

理解go中的接口,首先从java的入手
圆形和长方形是不同形状,因此他们是两个类,circle和rectangle
在java中,他们应当拥有一个公共父类,即形状shape
无论哪种形状,都应当是可计算面积的,因此shape类会存在一个抽象方法getarea()
circle类和rectangle类在继承shape父类时,需要重写getarea()方法以实现各自的面积计算
此时,getarea()就是一个接口
计算机科学中接口的作用一般描述为底层提供上层接口,从而屏蔽底层实现细节,上层在调用时无需考虑具体实现
对应上方例子,就是circle和rectangle在计算面积时,直接使用getarea即可,而需要考虑getarea是如何实现的,不过实际上getearea还是我们来实现的,这是因为我们既是底层开发者,又是上层调用者
当我们把视野放置到其他位置,例如操作系统中的接口,windows api,我们仅作为上层调用者,无需考虑接口底层的实现方式

go与jave等oop语言不同的是,go中不存在类和继承的概念,因此不太能用上面的例子来理解
go中存在结构体,实际上我们可以把结构体等效为上述例子中的类,
一个circle结构体和一个rectangle结构体,一个接口shape,shape中包含getarea方法
当circle和rectangle实现了该方法后,同样可以实现符合各自计算面积的方法

实际上编程语言中的接口更能体现的是多态,关于屏蔽底层细节这件事情,由于我们同时负责底层和上层,所以表现并不明显

定义接口,内含函数声明
定义类型,作为receiver实现接口中声明的函数
定义类型变量,利用向上转型,采用接口变量进行存储
通过接口变量调用接口中声明的函数,对应到具体类型的实现上

用接口变量存储类型变量是上转型,接口调用函数对应到具体类型的实现上是下转型

Reference

posted @   0x7F  阅读(50)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示