【发布时间】:2019-06-10 08:28:03
【问题描述】:
我在工作中讨论过接口名称和方法编号之间的相关性。
特别是,对于名称以er 结尾的后缀符号的接口,有一条不成文的规则。
规则说这样的接口应该包含一个方法。
让我们来看一个例子。在标准的 Go 语言库中,有 Pusher 接口做一件事“推送启动 HTTP/2 服务器推送”。
这是它的定义:
type Pusher interface {
Push(target string, opts *PushOptions) error
}
https://golang.org/pkg/net/http/#Pusher
很好的例子。但是,一些同事为他的实现进行了辩护,该实现包含两个以上名称后缀中带有er 的方法。
主要论点是有 stdlib 的接口违反了这样的规则。他提到了接口ReadCloser。
看它的定义:
type ReadCloser interface {
Reader
Closer
}
https://golang.org/pkg/io/#ReadCloser
我可以说这是错误的假设。接口本身嵌入了另外两个接口。我如何解释?没有违反规则。
您将如何解释这种情况?
【问题讨论】:
-
我不会说“ReaderAndCloser”是一个“坏”的名字,因为它本身就代表了这个概念,我的意思是,对于任何阅读它的人,读者都应该认为它在前面读取并关闭“事物”的“某事”。也许您应该将其重命名为“StreamReaderAndCloser”,以澄清您正在阅读或关闭的内容。如果讨论是关于命名和可读性的,我认为你应该尽可能清楚,我不知道为什么 icza 和 jubobs 限制他们的答案只是为了指出这个问题是重复的,而忽略了你实际上在问什么。希望对您有所帮助!
标签: go naming go-interface