微服务架构和实践程序员Golang 入门资料+笔记

golang 基础(20) 接口

2019-03-27  本文已影响73人  zidea
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,这里传递了两个信息

1280px-Lego_dimensions.svg.png

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

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

那么什么是 go 的 interface

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

concrete 类型
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
上一篇 下一篇

猜你喜欢

热点阅读