美文网首页
1.2.6go类型和接口

1.2.6go类型和接口

作者: rosekissyou | 来源:发表于2020-06-23 17:48 被阅读0次

Go语言的类型定义非常接近于C语言中的结构(struct),甚至直接沿用了struct关键字。相

比而言,Go语言并没有直接沿袭C++和Java的传统去设计一个超级复杂的类型系统,不支持继承

和重载,而只是支持了最基本的类型组合功能。

巧妙的是,虽然看起来支持的功能过于简洁,细用起来你却会发现,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的关系,但接口和类型可以直

接转换,甚至接口的定义都不用在类型定义之前,这种比较松散的对应关系可以大幅降低因为接

口调整而导致的大量代码调整工作。

相关文章

  • 1.2.6go类型和接口

    Go语言的类型定义非常接近于C语言中的结构(struct),甚至直接沿用了struct关键字。相 比而言,Go语言...

  • TypeScript接口

    属性类型接口 函数类型接口 定义了函数的参数。包括入参和出参。 可索引类型接口 类类型接口

  • flow中文文档(七)

    接口类型 接口语法 接口泛型 接口属性变量(只读和只写) 通用类型 泛型特性 接口类型 Flow中的类名义上是键入...

  • C#值类型和引用类型

    值类型和引用类型的区别(小结)相同点:引用类型可以实现接口,值类型当中的结构体也可以实现接口;引用类型和值类型都继...

  • 学习TypeScript 接口

    TypeScript 接口定义 interface interface_name {} 实例 联合类型和接口 接口...

  • ts接口 interface

    概念:可以用来约束一个函数,对象,以及类的结构和类型 1.对象类型的接口 2.函数类型的接口 3.混合类型的接口(...

  • C#之interface(接口)

    定义: 接口是指定一组函数成员而不实现成员的引用类型,其他类型-类和接口可以实现接口。 接口是一个引用类型,通过接...

  • Golang笔记--interface

    接口(interface) [TOC] 接口类型是对其它类型行为的抽象和概括, 接口把实现分离, 可以此来实现面向...

  • Java 泛型之 JDK 的底层实现原理

    AnnotatedType 数组类型、参数化类型和 类型变量,或通配符类型. Tree 接口 TypeTree 类...

  • Typescript - 基础(三)

    接口、函数、类 1、接口 作用:可以用来约束函数、对象以及类的结构和类型。 1.1 对象类型的接口 考虑其他情况:...

网友评论

      本文标题:1.2.6go类型和接口

      本文链接:https://www.haomeiwen.com/subject/prghfktx.html