Golang 开发规范(用 golang 实现阿里的《JAVA 开发手册》)

本文介绍了Golang编程的命名风格、常量定义、代码格式、代码工具使用、数组处理、字典处理、结构体处理、并发处理、控制语句、注释规约等方面的规定,旨在提高代码质量与可读性。例如,命名应遵循UpperCamelCase和lowerCamelCase风格,避免使用魔法值,推荐使用常量定义,并强调注释的必要性和格式规范,以及并发处理中的线程安全和并发控制。此外,还提出了在处理错误和日志时的注意事项,如错误类型以'Error'结尾,错误信息首字母小写,以及如何处理和记录错误日志。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编程规约

命名风格

  1. 【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。
    反例:_name / __name / $name / name_ / name$ / name__
  2. 【强制】代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。
    说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,纯拼音命名方式更要避免采用。
    正例:renminbi / alibaba / taobao / youku / hangzhou 等国际通用的名称,可视同英文。
    反例:DaZhePromotion [打折] / getPingfenByName() [评分] / int 某变量 = 3
  3. 【强制】公用的变量、类型、接口、结构、函数以及结构体的成员变量等命名使用 UpperCamelCase 风格,但以下情形例外:DO 等。
    正例:GolangStruct / UserDO / XmlService / TcpUdpDeal / TaPromotion
    反例:Golangstruct / UserDo / XMLService / TCPUDPDeal / TAPromotion
  4. 【强制】私有的变量、类型、接口、结构、函数以及参数名、局部变量都统一使用 lowerCamelCase 风格,必须遵从驼峰形式。
    正例: localValue / getHttpMessage() / inputUserId
  5. 【强制】常量命名命名使用 UpperCamelCase 风格,并使用 const 声明,力求语义表达完整清楚,不要嫌名长。
    正例:const StatusOK = 200
  6. 抽象结构命名使用 Abstract 或 Base 开头;
    异常类命名使用 Err 结尾;
    测试类命名以 Test 开头,以它要测试的函数的名称结尾。
    正例:ParamsErr := errors.New(“params err”)
  7. 接口命名规范一般使用 er 结尾:
    单个函数的接口名以“er”作为后缀,接口的实现则去掉 er;
    两个函数的接口名综合两个函数名,以 er 作为后缀,接口的实现则去掉 er ;
    三个以上函数的接口,抽象这个接口的功能,类似于结构体命名。
    正例:Writer / WriteReader / Ioer
  8. 数据和切片类型命名以 Arr 结尾,map 类型以 Map 结尾。相同功用的结构体可以根据功能采用相同的结尾,【强制】Api 请求以 Req 结尾,相应以 Res 结尾,数据结构体以 xxxModel 结尾,xxx即为数据表名。
    正例:var userArr [3]string / type LoginReq struct{} / type UserDO struct{}
  9. 返回结果主要为布尔类型的函数,函数名可以 is、has 等开头
  10. 【强制】工程名统一使用小写,单词之间使用 - 分割。包目录名一律使用小写,尽量采用一个单词命名,单词间不用符号分割,统一使用单数形式,但是结构体名如果有复数含义,结构体名可以使用复数形式。包目录下的包名( package namepackage ),如非 main 函数,和包目录名保持一直且单词间用 _ 分隔,测试文件以 _test 结尾。
    正例:db-utils / package db_utils / package db_utils_test
    反例:services
  11. 【强制】杜绝完全不规范的缩写,避免望文不知义,五个字母及以下单词不可缩写。
  12. 为了达到代码自解释的目标,任何自定义编程元素在命名时,使用尽量完整的单词组合来表达其意。
    反例:var a int 的随意命名方式。
  13. 在常量与变量的命名时,表示类型的名词放在词尾,以提升辨识度。如规范【8】所示。
    正例:startTime / startDate
    反例:startedAt / startDt
  14. 如果模块、接口、类、方法使用了设计模式,在命名时需体现出具体模式。
    说明:将设计模式体现在名字中,有利于阅读者快速理解架构设计理念。
  15. 【参考】各层命名规约:
    A) Service/DAO 层方法命名规
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值