是非惯用的非接口称为" * er"

时间:2014-07-02 16:15:41

标签: go

"Effective Go"州:

  

按照惯例,单方法接口由方法名称加号命名   用于构造代理名词的-er后缀或类似修改:   ReaderWriterFormatterCloseNotifier等。

bufio.io包中包含:

// Reader implements buffering for an io.Reader object.
type Reader struct {
    buf          []byte
    rd           io.Reader
    r, w         int
    err          error
    lastByte     int
    lastRuneSize int
}

是否具有名为“* er”的结构的惯用语?特别是在这种情况下,它是一个struct,其名称与io.Reader相同,是一个接口。

2 个答案:

答案 0 :(得分:2)

如果它不是有效的Go或规格,那么它确实是一个意见问题,只要它有意义,我就说它很好。

bufio.Readerbytes.Reader为例,以这种方式命名是完全合理的。

答案 1 :(得分:2)

评论type bufio.Reader struct很重要:

// Reader实现了io.Reader对象的缓冲。

bufio packages adds

  

包裹 io.Readerio.Writer个对象,创建另一个对象(ReaderWriter还实现了接口,但为文本I / O提供了缓冲和一些帮助。

由于bufio.Reader不是要添加任何新服务,而只是以缓冲方式实现io.Reader,因此保留名称并实现函数是有意义的:a {{ 1}}就够了。

从用户的角度来看,只要需要io.Reader,他/她就可以使用struct