本文视频地址
1 Go 举荐的”小接口 ”
接口 interface 这个单词,其实翻译过去就是 契约。契约能够简略也能够简单,Go 语言选择了简略。
1) Go 语言的接口与实现子类是隐式的关系,不是像 java 语言那样,要显示的 implements 关键字实现,实现类只有实现接口中的办法汇合的全副办法,就是主动实现了该接口。
2) 小接口应用起来更加灵便。
上面是规范库中的定义
// $GOROOT/src/builtin/builtin.go
type error interface {Error() string
}
// $GOROOT/src/io/io.go
type Reader interface {Read(p []byte) (n int, err error)
}
// $GOROOT/src/net/http/server.go
type Handler interface {ServeHTTP(ResponseWriter, *Request)
}
type ResponseWriter interface {Header() Header
Write([]byte) (int, error)
WriteHeader(int)
}
上述接口的办法只有 1 - 2 个之间,这种小接口就是 Go 语言最佳实际,已被宽泛应用。无论在规范库还是社区我的项目,都遵循这样的契约。
2 小接口的劣势
a)接口越小,形象水平越高,越彻底,被他人接受程度越好,其实接口和事实中的状况是一样的,最小的接口往往就是空接口,这个是最极限的状况
b) 容易实现和测试
小接口有较少的办法,个别仅仅一个办法。要想实现这个接口,开发者仅仅实现一个办法或少数几个办法,就能够了。单元测试尤为重要,能够付出较少的老本来验证你的程序是否有 bug。
c) 职责繁多,容易组合。
Go 语言举荐应用组合的形式来写程序。Go 开发者个别会通过嵌入其余已有接口类型的形式来构建新接口类型,官网的做法曾经通知咱们,如:io.Reader 和 io.Writer 构建了 io.ReadWriter。
3 定义小接口须要遵循的几点:
a) 晚期不要介意接口大小,只有先形象出接口即可。
b) 实现了这些办法后,你就会剖析出哪些场景适宜哪些接口的哪些办法,你试图去把这些接口的办法提取进去,做成一个小接口中。
c) 繁多职责,这也是软件设计模式中经典的理论指导,咱们应该尽量去恪守它,这样会让你的代码看起来清新,易于保护,出的 bug 少。