乐趣区

关于golang:19-小接口的妙用

本文视频地址

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 少。

退出移动版