func (b *Buffer) Read(p []byte) (n int, err error) func (sh serverHandler) ServeHTTP(rw ResponseWriter, req *Request) func (r Rectangle) Size() Point
需要注意的是,方法接收者的名字在同一类型的不同方法中应该保持统一,这也是前文所述的一贯性的需求。
导出包级别命名
导出名被使用的时候通常是放在包名后
所以,在导出变量、常数、函数和类型的时候,
不要把包名的意义再写一遍
比较好的名字
bytes.Buffer strings.Reader
比较蠢的名字
bytes.ByteBuffer strings.StringReader
接口类型
只含有一个方法的接口类型通常以函数名加上er后缀作为名字
type Reader interface {
Read(p []byte) (n int, err error)
}
有时候可能导致蹩脚的英文,但别管他,能看懂就好
type Execer interface {
Exec(p []byte) (n int, err error)
}
有时候可以适当调整一下英文单词的顺序,增加可读性:
type ByteReader interface {
ReadByte(p []byte) (n int, err error)
}
当接口含有多个方法的时候,还是要选取一个能够精准描述接口目的的名字,譬如net.Conn、http/ResponseWriter
Error的命名
Error类型应该写成FooError的形式
type ExitError struct {
....
}
Error变量协程ErrFoo的形式
var ErrFormat = errors.New("unknown format")
包的命名
应当与它导出代码的内容相关,避免util、common这种宽泛的命名
引入路径
包路径的最后一个单词应该和包名一致
包路径应该尽可能简洁
记得把库的主要代码直接放在代码库的根目录
避免在包路径中使用任何大写字母(并非所有文件系统都区分大小写)
标准库
上述很多例子都是从标准库中来的
标准库的很多内容都可以作为参考
多看看标准库来寻求灵感吧
但是要记住:
当作者写标准库的时候,他们自己也在学习过程中。
多数情况下作者是对的,但是偶尔还是会犯一些错误
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对易采站长站的支持。
参考文献
What's in a name? - Andrew Gerrand










