Go语言学习技巧之命名规范
Go  /  管理员 发布于 4年前   531
前言
本篇主要讲述Go语言的命名规范。优秀的代码必须具备良好的可读性,而可读性的关键即在于命名风格。
Go的函数、变量、常量、自定义类型、包(Package)的命名方式遵循以下规则:
1)首字符可以是任意的Unicode字符或者下划线
2)剩余字符可以是Unicode字符、下划线、数字
3)字符长度不限
Go只有25个关键字
break default func interface selectcase defer go map structchan else goto package switchconst fallthrough if range typecontinue for import return var
优秀的命名
首条经验
声明位置与使用位置越远,则命名应当越长。
骆驼命名法
局部变量
参数
函数的参数和局部变量类似,但是它们默认还具有文档的功能
当参数类型具有描述性的时候,参数名就应该尽可能短小:
func AfterFunc(d Duration, f func()) *Timerfunc Escape(w io.Writer, s []byte)
当参数类型比较模糊的时候,参数名就应当具有文档的功能:
func Unix(sec, nsec int64) Timefunc HasPrefix(s, prefix []byte) bool
返回值
在Go语言中,返回值可以定义名称的,它可以当做一种特殊的参数。
尤其重要的是,在外部可见的函数中,返回值的名称应当可以作为文档参考。
func Copy(dst Writer, src Reader) (written int64, err error)func ScanBytes(data []byte, atEOF bool) (advance int, token []byte, err error)
方法接收者(Receiver)
方法接收者也是一种特殊的参数。Go语言中没有明显的面向对象的概念,可以对方法定义方法接收者来实现类似于对象的方法的概念。
按照惯例,由于方法接收者在函数内部经常出现,因此它经常采用一两个字母来标识方法接收者的类型。
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这种宽泛的命名
引入路径
包路径的最后一个单词应该和包名一致
包路径应该尽可能简洁
记得把库的主要代码直接放在代码库的根目录
避免在包路径中使用任何大写字母(并非所有文件系统都区分大小写)
标准库
上述很多例子都是从标准库中来的
标准库的很多内容都可以作为参考
多看看标准库来寻求灵感吧
但是要记住:
当作者写标准库的时候,他们自己也在学习过程中。
多数情况下作者是对的,但是偶尔还是会犯一些错误
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对AIDI的支持。
参考文献
What's in a name? - Andrew Gerrand
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号