Redian新闻
>
GO-命名规范

GO-命名规范

公众号新闻

优秀的命名

优秀的命名应当是一贯的、短小的、精确的。
所谓一贯,就是说同一个意义在不同的环境下的命名应当一致,譬如依赖关系,不要在一个方法中命名为depend,另一个方法中命名为rely。
所谓短小,不必多言,当命名过长的时候,读者可能更关注命名本身,而忽视真正的逻辑内容。
所谓精确,就是命名达意、易于理解

首条经验

声明位置与使用位置越远,则命名应当越长。

骆驼命名法

Go语言应该使用 MixedCase
(不要使用 names_with_underscores)
首字母缩写词都应该用大写,譬如ServeHTTPsceneIDCIDRProcessor

局部变量

局部变量应当尽可能短小,譬如使用buf指代buffer,使用i指代index
在很长的函数中可能会有很多的变量,这个时候可以适当使用一些长名字。
但是写出这么长的函数,通常意味着代码需要重构了!🙅🏻‍

参数

函数的参数和局部变量类似,但是它们默认还具有文档的功能
当参数类型具有描述性的时候,参数名就应该尽可能短小:


func AfterFunc(d Duration, f func()) *Timer
func Escape(w io.Writer, s []byte)


当参数类型比较模糊的时候,参数名就应当具有文档的功能:


返回值

在Go语言中,返回值可以定义名称的,它可以当做一种特殊的参数。
尤其重要的是,在外部可见的函数中,返回值的名称应当可以作为文档参考。


方法接收者(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.Connhttp/ResponseWriter

Error的命名

Error类型应该写成FooError的形式


type ExitError struct {
....
}


Error变量协程ErrFoo的形式


包的命名

应当与它导出代码的内容相关,避免utilcommon这种宽泛的命名

引入路径

包路径的最后一个单词应该和包名一致

包路径应该尽可能简洁

记得把库的主要代码直接放在代码库的根目录

避免在包路径中使用任何大写字母(并非所有文件系统都区分大小写)

标准库

上述很多例子都是从标准库中来的

标准库的很多内容都可以作为参考
多看看标准库来寻求灵感吧

但是要记住:

当作者写标准库的时候,他们自己也在学习过程中。
多数情况下作者是对的,但是偶尔还是会犯一些错误

var ErrFormat = errors.New("unknown format")


func Copy(dst Writer, src Reader) (written int64, err error)
func ScanBytes(data []byte, atEOF bool) (advance int, token []byte,
err error)


func Unix(sec, nsec int64) Time
func HasPrefix(s, prefix []byte) bool


链接:https://www.cnblogs.com/zhangboyu/p/01fb1e0fc19c02e3f6460ebbb6dd61c8.html

(版权归原作者所有,侵删)

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
美国宾州葛底斯堡国家军事公园,火炮战场老西我在国内平台直播贾跃亭炮轰小米;周鸿祎夸小米SU7命名;ChatGPT无需注册可直接使用;郑爽已无财产可供执行;中国黄金回应门店跑路...教育公益π计划—-活动介绍及答疑,图书角命名国家互联网信息办公室公布《促进和规范数据跨境流动规定》拜登邪恶的将复活节新命名为‘跨性别者可见日’川普和议长要求其道歉英国超市ocado限时75折!AMI/Golden Goose精选6折!西太后75折!Golden Goose黄金鹅一季度净销售额同比增长11%熵泱——第三十八章蔚来第二品牌即将发布,首款车对标特斯拉Model Y;魅族旗下首款车型命名魅族MX丨汽车交通日报芯片纳米命名法,是错误的!Jellycat限时巨折!2折起:英国优衣库/Diesel/GoldenGoose/We11done等!Go Canucks Go! 大温球迷疯涌上街庆祝 两省长打起了擂台国家药监局关于将化妆品毒理学试验方法样品前处理通则等19项制修订项目纳入化妆品安全技术规范(2015年版)的通告全文 | 国家网信办《促进和规范数据跨境流动规定》发布!附答记者问及安全评估、标准合同申报指南(第二版)药你知道|《医疗器械经营质量管理规范》系列解读(六)《魅羽活佛》第370章 姐弟恋巴黎大皇宫正殿入口正式被命名为 Gabrielle Chanel国家药监局关于将牙膏pH值的检验方法等15项检验方法纳入化妆品安全技术规范(2015年版)的通告长篇小说《谷雨立夏间》75 温暖港湾QQ微信上线地震预警功能,抖音辟谣限制财经时政等内容,魅族旗下首款车型命名魅族MX,淘宝App首页改版,这就是今天的其他大新闻!向华裔烈士致敬!纽约这所学校正式以华裔殉职警官刘文健的名字命名!【新加坡今日要闻】被树砸毁车牌开出万字票中奖号码,新西兰总理出席胡姬花命名的仪式差点在睡梦中挂了!租户呼吁修改建筑规范3月20日19:00,2024心房颤动临床规范化治疗继续教育项目即将开启!|精彩预告金融行业 | 从“规范和促进”到“促进和规范”——解读《促进和规范数据跨境流动规定》2024心房颤动临床规范化治疗 I 李广平、罗心平、吕强、周根青、张志辉:心房颤动抗凝规范化的问题黄仁勋每天都用的 AI 产品,来自 Google,颠覆 Google【演化生物学】8. 生物分类学II:命名法Google 手机设计细节曝光,苹果三星都没它显眼|Google 工业设计总监专访早鸟报|蚂蚁集团组织架构调整升级;美团上线“骑手商家互评通道”;快手电商发布数字人直播卖货规范...中国唯一以皇帝命名的城市,夏季均温23℃,北方避暑天堂,90%的人却都玩错了地方!可口可乐亲手「毁」掉了自家的经典 Logo | Feel Good 周报波兰F-35战斗机命名为骠骑兵,还换掉了特殊机徽拒绝被治好的“神经病”:关于章太炎被命名/自我命名的抵抗主体位置
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。