Go语言开发编程规范命令风格代码格式

前言

今天这篇文章是站在巨人的肩膀上,汇总了目前主流的开发规范,同时结合Go语言的特点,以及自己的项目经验总结出来的:爆肝分享两千字Go编程规范。

后续还会更新更多优雅的规范。

命名风格

1. 【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。

反 例 :

_name / __name / $name / name_ / name$ / name__

2. 【强制】代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。

说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。

注意,纯拼音命名方式更要避免采用。

正例:

renminbi / alibaba / taobao / youku / hangzhou

等国际通用的名称,可视同英文。

反 例 :

DaZhePromotion [ 打 折 ] / getPingfenByName() [评分] / int某变量 = 3

3. 【强制】公用的变量、类型、接口、结构、函数以及结构体的成员变量等命名使用UpperCamelCase风格。

正例:

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 ; 三个以上函数的接口,抽象这个接口的功能,类似于结构体命名。

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. 为了达到代码自解释的目标,任何自定义编程元 素在命名时,使用尽量完整的单词组合来表达其意。反例:var a int 的随意命名方式。

12. 在常量与变量的命名时,表示类型的名词放在词尾,以提升辨识度。如规范【8】所示。

正例:

startTime / startDate

反例:

startedAt / startDt

13.如果模块、接口、类、方法使用了设计模式,在命名时需体现出具体模式。

说明:将设计模式体现在名字中,有利于阅读者 快速理解架构设计理念。

代码格式

1. 【强制】如果是大括号内为空,则简洁地写成{} 即可,大括号中间无需换行和空格;如果是非空 代码块则: 1) 左大括号前不换行。 2) 左大括号后换行。 3) 右大括号前换行。 4) 右大括号后还有 else 等代码则不换行;表 示终止的右大括号后必须换行。

2. 【强制】左小括号和字符之间不出现空格;同样, 右小括号和字符之间也不出现空格;而左大括号 前需要空格。 反例:if (空格 a == b 空格)

3. 【强制】if / for / switch 等保留字与括号之间都必 须加空格。

4. 【强制】任何二目、三目运算符的左右两边都需 要加一个空格。 说明:运算符包括赋值运算符= 、逻辑运算符&&、 加减乘除符号等。

5. 【强制】采用 tab 字符缩进,宽度设置为 4 个 空格

6. 【强制】单行字符数限制不超过 120 个,超出 需要换行,换行时遵循如下原则:

  • 第二行相对第一行缩进一个 tab,从第三行 开始,不再继续缩进。
  • 运算符与上文一起作为结尾。
  • 方法调用的点符号与上文一起作为结尾。
  • 方法调用中的多个参数需要换行时,在逗号 后进行。
  • 在括号前不要换行

7.【强制】函数参数在定义和传入时,多个参数逗 号后边必须加空格。

控制语句

1.【强制】在一个 switch 块内,每个 case 无需声 明 break 来 终 止 , 如 果 想 顺 序 执 行 使 用 fallthrough ;在一个 switch 块内,都必须包含 一个 default 语句并且放在最后,即使它什么代 码也没有。

2.【强制】在高并发场景中,避免使用”等于”判 断作为中断或退出的条件。 说明:如果并发控制没有处理好,容易产生等值 判断被“击穿”的情况,使用大于或小于的区间 判断条件来代替。 反例:判断剩余奖品数量等于 0 时,终止发放 奖品,但因为并发处理错误导致奖品数量瞬间变成了负数, 这样的话,活动无法终止。

3.【推荐】表达异常的分支时,少用 if-else 方式, 这种方式可以改写成:

if condition { … return obj; } // 接着写 else 的业务逻辑代码;

说明:如果非使用 if()…else if()…else…方式表 达逻辑,避免后续代码维护困难,

【强制】请勿 超过 3 层。

正例:超过 3 层的 if-else 的逻辑判断代码可 以使用卫语句、策略模式、状态模式等来实现, 其中卫语句即代码逻辑先考虑失败、异常、中断、 退出等直接返回的情况,以方法多个出口的方 式,解决代码中判断分支嵌套的问题,这是逆向 思维的体现。

4. 【参考】下列情形,需要进行参数校验:

  • 调用频次低的方法。
  • 执行时间开销很大的方法。此情形中,参数 校验时间几乎可以忽略不计,但如果因为参数错 误导致中间执行回退,或者错误,那得不偿失。
  • 需要极高稳定性和可用性的方法。
  • 对 外 提 供 的 开 放 接 口 , 不 管 是 RPC/API/HTTP 接口。
  • 敏感权限入口。

5. 【参考】下列情形,不需要进行参数校验:

  • 极有可能被循环调用的方法。但在方法说明 里必须注明外部参数检查要求。
  • 底层调用频度比较高的方法。毕竟是像纯净 水过滤的最后一道,参数错误不太可能到底层才 会暴露问题。一般 DAO 层与 Service 层都在 同一个应用中,部署在同一台服务器中,所以 DAO 的参数校验,可以省略。

杂项

1. 【强制】在使用正则表达式时,利用好其预编译 功能,可以有效加快正则匹配速度。

正例:

// 预编译当前正则表达式re, _ := regexp.Compile("^hel+o") // 是否匹配指定字符串 isMatch := re.MatchString(“hello world”)

2. 【推荐】及时清理不再使用的代码段或配置信息。 说明:对于垃圾代码或过时配置,坚决清理干净, 避免程序过度臃肿,代码冗余。 正例:对于暂时被注释掉,后续可能恢复使用的 代码片断,在注释代码上方,统一规定使用三个 斜杠(///)来说明注释掉代码的理由。

异常日志

1. 【强制】使用控制流机制应对错误,通过从函数 返回错误作为附加返回值来指示错误,如果函数 有多个返回值,习惯上将错误值作为最后一个结 果返回。如果错误只有一种情况,结果通常设置为布尔类型。nil 值表示没有错误。 正例:res, err := somepkgAction()

2. 【强制】对于总是成功返回的函数,不必返回错误。

3. 【强制】错误信息的首字母小写且避免换行

更多

还会更新更多优雅的规范实践...

没有规矩不成方圆,团队开发中只有严格按照规范进行,才能避免开发一时爽,维护火葬场的困顿局面~

以上就是Go语言开发编程规范命令风格代码格式的详细内容,更多关于Go编程规范命令风格代码格式的资料请关注我们其它相关文章!

(0)

相关推荐

  • 一文了解Go语言中编码规范的使用

    每个语言都有自己特色的编码规范,学习该语言的命名规范,能让你写出来的代码更加易读,更加不容易出现一些低级错误. 本文根据个人编码习惯以及网络上的一些文章,整理了一些大家能用上的编码规范,可能是一些主流方案,但不代表官方,这一点先声明一下. 1. 文件命名 由于 Windows平台文件名不区分大小写,所以文件名应一律使用小写 不同单词之间用下划线分词,不要使用驼峰式命名 如果是测试文件,可以以 _test.go 结尾 文件若具有平台特性,应以 文件名_平台.go 命名,比如 utils_ wind

  • golang语言编码规范的实现

    本规范旨在为日常Go项目开发提供一个代码的规范指导,方便团队形成一个统一的代码风格,提高代码的可读性,规范性和统一性.本规范将从命名规范,注释规范,代码风格和 Go 语言提供的常用的工具这几个方面做一个说明.该规范参考了 go 语言官方代码的风格制定. 一. 命名规范 命名是代码规范中很重要的一部分,统一的命名规则有利于提高的代码的可读性,好的命名仅仅通过命名就可以获取到足够多的信息. Go在命名时以字母a到Z或a到Z或下划线开头,后面跟着零或更多的字母.下划线和数字(0到9).Go不允许在命名

  • 详解Golang 推荐的命名规范

    Golang 推荐的命名规范 很少见人总结一些命名规范,也可能是笔者孤陋寡闻, 作为一个两年的golang 开发者, 我根据很多知名的项目,如 moby, kubernetess 等总结了一些常见的命名规范. 命名规范可以使得代码更容易与阅读, 更少的出现错误. 如有不同意见欢迎吐槽.讨论. 项目地址 文件命名规范 由于文件跟包无任何关系, 而又避免windows大小写的问题,所以推荐的明明规范如下: 文件名应一律使用小写, 不同单词之间用下划线分割, 命名应尽可能地见名知意 常量命名规范 常量

  • Django 如何使用日期时间选择器规范用户的时间输入示例代码详解

    如果你的模型中含有 datetime 类型的字段,表单中需要用户输入日期和时间,那么你如何保证不同用户输入的时间都遵循一定的格式 (DD/MM/YYYY 或者 YYYY-MM-DD) 是个必须要考虑的问题.一个更好的方式是在前端使用日期时间选择器 DateTimePicker,以日历的形式统一选择输入时间,如下图所示.小编今天将尝试以最少的代码教你实现如何在 Django 项目中实现日期时间选择器 DateTimePicker. 示范模型 假如我们有如下一个 Article 模型,含有 pub_

  • 基于Google的Python编码规范标准

    目录 Python 风格规范(Google) 分号 行长度 括号 缩进 空行 空格 Python 风格规范(Google) 本项目并非 Google 官方项目, 而是由国内程序员凭热情创建和维护. 如果你关注的是 Google 官方英文版, 请移步 Google Style Guide 以下代码中 Yes 表示推荐,No 表示不推荐. 分号 不要在行尾加分号, 也不要用分号将两条命令放在同一行. 行长度 每行不超过80个字符 以下情况除外: 长的导入模块语句注释里的URL 不要使用反斜杠连接行.

  • Go语言开发编程规范命令风格代码格式

    前言 今天这篇文章是站在巨人的肩膀上,汇总了目前主流的开发规范,同时结合Go语言的特点,以及自己的项目经验总结出来的:爆肝分享两千字Go编程规范. 后续还会更新更多优雅的规范. 命名风格 1. [强制]代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束. 反 例 : _name / __name / $name / name_ / name$ / name__ 2. [强制]代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式. 说明:正确的英文拼写和语法可以

  • JavaScript开发规范要求(规范化代码)

    本人在开发工作中就曾与不按规范来开发的同事合作过,与他合作就不能用"愉快"来形容了.现在本人撰写此文的目的除了与大家分享一点点经验外,更多的是希望对未来的合作伙伴能够起到一定的借鉴作用.当然,如果我说的有不科学的地方还希望各路前辈多多指教.下面分条目列出各种规范要求,这些要求都是针对同事编码毛病提出来的,好些行业约定的其它规范可能不会再提及. 1.保证代码压缩后不出错 对于大型的JavaScript项目,一般会在产品发布时对项目包含的所有JavaScript文件进行压缩处理,比如可以利

  • 现代 JavaScript 开发编程风格Idiomatic.js指南中文版

    你为项目所择风格都应为最高准则.作为一个描述放置于你的项目中,并链接到这个文档作为代码风格一致性.可读性和可维护性的保证. 一.空白 1.永远都不要混用空格和Tab.2.开始一个项目,在写代码之前,选择软缩进(空格)或者 Tab(作为缩进方式),并将其作为最高准则.a).为了可读, 我总是推荐在你的编辑中设计2个字母宽度的缩进 - 这等同于两个空格或者两个空格替代一个 Tab.3.如果你的编辑器支持,请总是打开 "显示不可见字符" 这个设置.好处是:a).保证一致性b).去掉行末的空格

  • Go语言开发区块链只需180行代码(推荐)

    区块链开发用什么语言?通过本文你将使用Go语言开发自己的区块链(或者说用go语言搭建区块链).理解哈希函数是如何保持区块链的完整性.掌握如何用Go语言编程创造并添加新的块.实现多个节点通过竞争生成块.通过浏览器来查看整个链.了解所有其他关于区块链的基础知识. 但是,文章中将不会涉及工作量证明算法(PoW)以及权益证明算法(PoS)这类的共识算法,同时为了让你更清楚得查看区块链以及块的添加,我们将网络交互的过程简化了,关于 P2P 网络比如"全网广播"这个过程等内容将在后续文章中补上.

  • Go语言开发代码自测绝佳go fuzzing用法详解

    目录 特别说明 go fuzzing 是什么 go fuzzing 怎么用 运行 fuzzing tests go-zero 的最佳实践 1. 定义 fuzzing arguments 2. 怎么写 fuzzing target 3. 失败 case 如何打印输入 4. 编写新的测试用例 go fuzzing 更多经验 Go 版本问题 go fuzzing 不能复现的失败 复杂用法示例 特别说明 这个真的不是标题党,我写代码20+年,真心认为 go fuzzing 是我见过的最牛逼的代码自测方法

  • 详解Java编程规约(命名风格、常量定义、代码格式)

    命名风格 1.[强制]代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束. 反例: _name / __name / $name / name_ / name$ / name__ 2.[强制]代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式. 说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义.注意,纯拼音命名方式更要避免采用. 正例:renminbi / alibaba / taobao / youku / hangzhou 等国际通用的名称,可视

  • Dojo Javascript 编程规范 规范自己的JavaScript书写

    前言 良好的JavaScript书写习惯的优点不言而喻,今天彬Go向大家推荐Dojo Javascript 编程规范,相当不错的 Javascript 编程风格规范,建议大家可以借鉴一下此规范编写 Javascript.感谢i.feelinglucky的翻译. 序 Any violation to this guide is allowed if it enhances readability. 所有的代码都要变成可供他人容易阅读的. 快读参考 核心 API 请使用下面的风格: 结构 规则 注释

  • Go语言开发环境搭建与初探(Windows平台下)

    Go语言开发环境的搭建(Windows) Windows下的Go语言开发安装包 官方下载地址: https://code.google.com/p/go/downloads/list 我们下载地址:http://www.jb51.net/softs/237132.html Go语言中文官网(有相关参考和文档) http://zh.golanger.com/ 方法/步骤 1.在Go语言的Google代码项目上下载Windows下的Go语言开发包(下载地址见工具).有zip压缩版和msi安装版两个按

  • Swift和C语言混合编程教程

    作为一种可与 Objective-C 相互调用的语言,Swift 也具有一些与 C 语言的类型和特性,如果你的代码有需要,Swift 也提供了和常见的 C 代码结构混合编程的编程方式. 基本数据类型 Swift 提供了一些和 C 语言的基本类型如char,int,float,double等价的 Swift 基本数据类型.然而,这些 Swift 的核心基本类型之间并不能隐式的相互转换,如 Int.因此,只有你的代码明确要求它们时再使用这些类型,而 Int 可以在任何你想使用它的时候使用. C 类型

  • 基于php编程规范(详解)

    今天写这个是为了 提醒自己 编程过程 不仅要有逻辑 思想 还有要规范 代码 这样可读性 1.PHP 编程规范与编码习惯最主要的有以下几点: 1 文件说明 2 function 函数体说明 3 代码缩进 4 if省略 5 变量规范 6 命名规范 7 十行一注释 8 注释风格 9 开放关闭原则 2.文件说明 个人代码 -规范如下: <? /* +---------------------------------------------------------------------- + Title

随机推荐