golang中的类型和接口
来源:互联网 发布:大唐电信c语言笔试题 编辑:程序博客网 时间:2024/05/29 23:23
Go语言的类型定义非常接近于C语言中的结构(struct),甚至直接沿用了struct关键字。相比而言,Go语言并没有直接沿袭C++和Java的传统去设计一个超级复杂的类型系统,不支持继承和重载,而只是支持了最基本的类型组合功能。
巧妙的是,虽然看起来支持的功能过于简洁,细用起来你却会发现,C++和Java使用那些复杂的类型系统实现的功能在Go语言中并不会出现无法表现的情况,这反而让人反思其他语言中引入这些复杂概念的必要性。我们在第3章中将详细描述Go语言的类型系统。
这两者目前看起来完全没有关系,现在看看我们如何使用它们:
可以看出,虽然Bird类型实现的时候,没有声明与接口IFly的关系,但接口和类型可以直接转换,甚至接口的定义都不用在类型定义之前,这种比较松散的对应关系可以大幅降低因为接口调整而导致的大量代码调整工作。
巧妙的是,虽然看起来支持的功能过于简洁,细用起来你却会发现,C++和Java使用那些复杂的类型系统实现的功能在Go语言中并不会出现无法表现的情况,这反而让人反思其他语言中引入这些复杂概念的必要性。我们在第3章中将详细描述Go语言的类型系统。
Go语言也不是简单的对面向对象开发语言做减法,它还引入了一个无比强大的“非侵入式”接口的概念,让开发者从以往对C++和Java开发中的接口管理问题中解脱出来。在C++中,我们通常会这样来确定接口和类型的关系:
// 抽象接口interface IFly{virtual void Fly()=0;};// 实现类class Bird : public IFly{public:Bird(){}virtual ~Bird(){}public:void Fly(){// 以鸟的方式飞行}};void main(){IFly* pFly = new Bird();pFly->Fly();delete pFly;}显然,在实现一个接口之前必须先定义该接口,并且将类型和接口紧密绑定,即接口的修改会影响到所有实现了该接口的类型,而Go语言的接口体系则避免了这类问题:
type Bird struct {...}func (b *Bird) Fly() {// 以鸟的方式飞行}图
我们在实现Bird类型时完全没有任何IFly的信息。我们可以在另外一个地方定义这个IFly接口:
type IFly interface {Fly()}
这两者目前看起来完全没有关系,现在看看我们如何使用它们:
func main() {var fly IFly = new(Bird)fly.Fly()}
可以看出,虽然Bird类型实现的时候,没有声明与接口IFly的关系,但接口和类型可以直接转换,甚至接口的定义都不用在类型定义之前,这种比较松散的对应关系可以大幅降低因为接口调整而导致的大量代码调整工作。
0 0
- golang中的类型和接口
- Golang中的接口
- golang 中的 类型判断
- Golang中的error类型
- golang 组合和接口
- golang: 类型转换和类型断言
- golang: 类型转换和类型断言
- golang: 类型转换和类型断言
- GoLang 类型转换和类型断言
- goLang中的基础类型简单应用
- Golang中的panic和recover
- 接口和抽象类中的方法和变量的类型
- Golang学习笔记 方法和接口
- golang接口
- golang 接口
- golang 接口
- golang基础-接口、接口嵌套、类型断言、接口与结构体_接口等转换
- Golang 学习笔记 ---类型和一个 HelloWorld
- hadoop2.7.1 HA配置
- java-IO操作-使用字符流读写数据
- java生成不重复随机数
- java中文乱码解决之道(一)—–认识字符集
- Vuforia通过代码提高target识别率
- golang中的类型和接口
- iOS开发-Socket通讯方式
- oracle存储过程,集合对象处理
- android之注解IOC(一)
- 多一点点的心得
- solr6 apache-tomcat-8.0.33-windows-x64 服务端运行步骤讲解
- 打造自己的安卓crack.smali利器
- 数据存储File SharedPreference Sqlite
- mybatis generator 工具的使用