1 回答
TA贡献1794条经验 获得超7个赞
这个问题可能会被关闭,因为它被认为是基于意见的,或者与代码无关,或者其他......
然而,golang 被认为非常固执己见,并且因为我认为标准非常重要,所以我将加入我对不成文规则的看法,以及我将如何调和,本质上为什么它ReadCloser
很好,但其他一些er
接口可能不是。
我将其解释ReadCloser
为不违反“规则”(我更愿意称之为约定)。为什么我会说它没有违反公约,我有很多论据:
1.它不是一个独立的界面
该ReadCloser
界面不是独立的界面。这是一个组合界面。它的名字反映了这一点。它连接Read
和Close
(您之后的界面中的 2 个函数),并添加后缀er
。这两个功能是如何实现的,以及它们来自哪里与接口无关。如果您阅读了一些内容,很可能您也需要关闭该资源。Reader
只有结合这两个接口才有意义,因此您可以使用保证两者和Closer
功能都可用的类型。
2. 名字不能口吃
就像指南 WRT包名称结巴是要避免的。特别是如果它不增加任何价值。从技术上讲,有人可能会争辩说应该调用该接口ReaderCloser
,但是该名称是否传达了该名称未传达的任何信息ReadCloser
?当然不是。后者不重复后缀,读起来更容易。
3.er
接口和CamelCasing
单功能接口的例子,er
如Stringer
, 或Publisher
确实很简单。AStringer
包含String
函数。故事结局。和界面一样Publisher
。
您会注意到该ReadCloser
接口是 CamelCased,表明它是一种复合类型。只需将名称拆分为大写字符,并将后缀添加到每个部分。如果部件是真正的er
接口,并且复合接口有意义(参见第 1 点:如果您阅读,很可能需要关闭),那么它就是一个有效的复合接口。
无效er
接口的例子是:
type FileReader interface {
ReadCloserer
ScanDir(string) ([]string, error)
IsFile(string) bool
Open(string, string) error
// and so on
}
这个接口包含了太多的 BS 功能,无法打包到一个FileReader接口中。
- 1 回答
- 0 关注
- 117 浏览
添加回答
举报