golang 基础(20) 接口

zidea · · 1417 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

square-gopher.png
interface.jpg

接口

什么是 interface

提到接口,我们会联想到汽车的接口,也就是让司机如何操作汽车按自己意愿使用,用户界面也是接口,会联想到很多很多。接口看了很多,对初学者比较难理解,但是一旦理解了并可以灵活运用了,接口 power 还是很大的。
接口可以理解是规范、协议、用户使用手册和对类型抽象,对行为描述。说了这么一大堆还需要您自己了解。

In object-oriented programming, a protocal or interface is a common means for unrelated objects to communicate with each other
wikipedia

上面的话摘字 wiki,这里传递了两个信息

  • communicate 接口是用于通讯,接口就是用来定义通讯遵循的规则
  • unrelated objects 没有关系的对象,接口定义通讯规则可以使用两个互不相干的对象。
1280px-Lego_dimensions.svg.png

乐高玩具就是一个好的例子。乐高玩具的一个piece 组合时只要遵守尺寸规则,无论大小和颜色就可以组合在一起进行拼接。

以后兼职工作也是一样只要满足规定的条件,在拼接 Lego 玩具时是否可以拼接是和piece 的颜色和形状没有关系的,只要他们都遵守一定尺寸就可以进行拼接。在软件控制模块搭建和通讯也是通过定义一定接口规范来实现了。我想软件工程也在某些方面借鉴传统的行业。

那么什么是 go 的 interface

  • abstract types
  • concrete types

当然在 go 语言中有很多种类型,不过我们大致可以将归为两种一种类型属于abstract类型(抽象类型)和concrete类型(实体类型)

concrete 类型
  • 用于描述类型在内存中分配情况
    int8/int16/int32/int64/struct/float
  • 使用方法赋予数据一定的行为
type Number int
func (n Number) Positive() bool{
    return n >0
}
abstract 类型

抽象类型并没定义描述如何为这种类型分配内存空间,而是描述类型的行为。按行为为类型进行划分。这些抽象类型有io.Readerio.Writerfmt.String等等

type Positiver interface{
  Positive() bool
}

用来说明 go 语言接口的经典接口 Writer 和 Reader 接口

type Reader interface{
  Read(b []byte)(int,error)
}
type Writer interface{
  Writer(b []byte)(int,error)
}

只要实现了接口的方法的类型就属于接口类型,所以集合是普通类型的集合。我们接口是可以组合,但是接口越详细确定范围也就小 weak

type ReadWriter interface{
  Read
  Writer
}

这里有一个 interface{} Rob Pike 指着interface{}是没有任何意思,因为没有任何限制,没有限制也就是没有意义,这个应该不难理解

1200px-Rob-pike-oscon.jpg


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:zidea

查看原文:golang 基础(20) 接口

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1417 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传