golang命名规范
命名规则
- golang的变量函数命名需要使用驼峰命名法,且不能出现下划线, 文件名使用下划线
- golang中根据首字母的大小写来确定可以访问的权限。无论是方法名、常量、变量名还是结构体的名称,如果首字母大写,则可以被其他的包访问;如果首字母小写,则只能在本包中使用可以简单的理解成: 首字母大写是公有的,首字母小写是私有的文件的命名,全小写,测试的文件:xxx_test.go包名和文件夹名字最好一样
变量命名规则
- 变量命名命名必须清晰、明了,有明确含义的单词,命名中禁止使用缩写,除非已是业界通用或标准化的缩写;
- 单字母名称仅适用于短方法中的局部变量,名称长短应与其作用域相对应。若变量或常量可能在代码中多处使用,则应赋其以便于搜索的名称且有意义的名称。
- 变量名称一般遵循驼峰法,但遇到特有名词时,需要遵循以下规则:如果变量为私有,且特有名词为首个单词,则使用小写,如 apiClient,其它情况都应当使用该名词原有的写法,如APIClient、repoID、UserID
错误示例:UrlArray,应该写成urlArray或者URLArray
一些常见的特有名词:
// A GonicMapper that contains a list of common initialisms taken from golang/lint
var LintGonicMapper = GonicMapper{"API": true,"ASCII": true,"CPU": true,"CSS": true,"DNS": true,"EOF": true,"GUID": true,"HTML": true,"HTTP": true,"HTTPS": true,"ID": true,"IP": true,"JSON": true,"LHS": true,"QPS": true,"RAM": true,"RHS": true,"RPC": true,"SLA": true,"SMTP": true,"SSH": true,"TLS": true,"TTL": true,"UI": true,"UID": true,"UUID": true,"URI": true,"URL": true,"UTF8": true,"VM": true,"XML": true,"XSRF": true,"XSS": true,
}
函数命名规则
驼峰式命名,名字可以长但是得把功能,必要的参数描述清楚,函数名名应当是动词或动词短语,如postPayment、deletePage、save。并依Javabean标准加上get、set、is前缀。例如:xxx + With + 需要的参数名 + And + 需要的参数名 + …..
结构体命名规则
- 结构体名应该是名词或名词短语,如Custome、WikiPage、Account、AddressParser,WriteDbMgr,ConfMgr,避免使用Manager、Processor、Data、Info等类名,而且类名不应当是动词。
- 结构体中属性名大写,如果属性名小写则在数据解析(如json解析,或将结构体作为请求或访问参数)时无法解析
包名命名规则
包名应该为小写单词,不要使用下划线或者混合大小写。
接口命名规则
单个函数的接口名以”er”作为后缀,如Reader,Writer。接口的实现则去掉“er”。
type Reader interface {Read(p []byte) (n int, err error)
}
//两个函数的接口名综合两个函数名
type WriteFlusher interface {Write([]byte) (int, error)Flush() error
}
//三个以上函数的接口名,抽象这个接口的功能,类似于结构体名
type Car interface {Start([]byte) Stop() errorRecover()
}
注释
在编码阶段应该同步写好变量、函数、包的注释,最后可以利用godoc导出文档。注释必须是完整的句子,句子的结尾应该用句号作为结尾(英文句号)。注释推荐用英文,可以在写代码过程中锻炼英文的阅读和书写能力。而且用英文不会出现各种编码的问题。
每个包都应该有一个包注释,一个位于package子句之前的块注释或行注释。包如果有多个go文件,只需要出现在一个go文件中即可。
// log包实现了常用的log相关的函数
package log 导出函数注释,第一条语句应该为一条概括语句,并且使用被声明的名字作为开头。
// 求a和b的和,返回sum.
func Myfunction(a, b int) (sum int){}
常量
- 常量均需使用全部大写字母组成,并使用下划线分词:const APP_VER = “1.0”
- 如果是枚举类型的常量,需要先创建相应类型:
type Scheme string
const (HTTP Scheme = "http"HTTPS Scheme = "https"
)
- 如果模块的功能较为复杂、常量名称容易混淆的情况下,为了更好地区分枚举类型,可以使用完整的前缀:
type PullRequestStatus int
const (PULL_REQUEST_STATUS_CONFLICT PullRequestStatus = iotaPULL_REQUEST_STATUS_CHECKINGPULL_REQUEST_STATUS_MERGEABLE
)
变量规则举例
- 变量命名基本上遵循相应的英文表达或简写,在相对简单的环境(对象数量少、针对性强)中,可以将一些名称由完整单词简写为单个字母,例如:
– user 可以简写为 u
– userID 可以简写 uid
– 若变量类型为 bool 类型,则名称应以 Has, Is, Can 或 Allow 开头:
var isExist bool
var hasConflict bool
var canManage bool
var allowGitHook bool
import
对import的包进行分组管理,用换行符分割,而且标准库作为分组的第一组。如果你的包引入了三种类型的包,标准库包,程序内部包,第三方包,建议采用如下方式进行组织你的包
import ("github.com/bitly/go-simplejson""strconv""container/list""gopkg/utils"
)
在项目中不要使用相对路径引入包:import “../utils”
参数传递
- 对于少量数据,不要传递指针
- 对于大量数据的struct可以考虑使用指针
- 传入参数是map,slice,chan不要传递指针,因为map,slice,chan是引用类型,不需要传递指针的指针
单元测试
- 单元测试文件名命名规范为 example_test.go
- 测试用例的函数名称必须以 Test 开头,例如:TestExample
golang命名规范相关推荐
- golang 命名规范和开发规范
目录 文件命名 package 变量 常量 接口 结构体 方法 注释 README 文件命名 文件命名一律采用小写,不用驼峰式,尽量见名思义,看见文件名就可以知道这个文件下的大概内容. 其中测试文件以 ...
- Golang 推荐的命名规范
很少见人总结一些命名规范,也可能是笔者孤陋寡闻, 作为一个两年的golang 开发者, 我根据很多知名的项目,如 moby, kubernetess 等总结了一些常见的命名规范. 命名规范可以使得代码 ...
- 初探Golang(2)-常量和命名规范
1 命名规范 1.1 Go是一门区分大小写的语言. 命名规则涉及变量.常量.全局函数.结构.接口.方法等的命名. Go语言从语法层面进行了以下限定:任何需要对外暴露的名字必须以大写字母开头,不需要对外 ...
- Golang编码规范
简介: gofmt 大部分的格式问题可以通过gofmt解决,gofmt自动格式化代码,保证所有的go代码与官方推荐的格式保持一致,于是所有格式有关问题,都以gofmt的结果为准. gofmt 大部分的 ...
- html语言书写注意事项,CSS命名规范参考及书写注意事项
CSS书写顺序 *{ /*显示属性*/ display position float clear cursor - /*盒模型*/ margin padding width height /*排版*/ ...
- [置顶] Objective-C ,ios,iphone开发基础:命名规范
命名规范:http://bukkake.iteye.com/blog/695492 点击打开链接 转载于:https://www.cnblogs.com/pangblog/p/3292256.htm ...
- Java项目命名规范
2019独角兽企业重金招聘Python工程师标准>>> 一.命名规范 1. 项目名全部小写 2. 包名全部小写 3. 类名首字母大写,如果类名由多个单词组成,每个单词的首字母都要大写 ...
- Java 命名规范(非常全)
欢迎关注方志朋的博客,回复"666"获面试宝典 在本文中,将从大到小,从外到内,总结Java编程中的命名规范.文中将会涉及到日常工作中常见的命名示例,如包命名,类命名,接口命名,方 ...
- SQL Server中的命名规范(个人使用)
< DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd> 表名前缀t 字段名前缀f ...
最新文章
- 【小白自学Python时踩的那些坑,你值得拥有】
- 像“毒液”一样的粘液机器人火了,能取出体内异物,穿过1.5mm细缝无压力 | 哈工大港中大...
- 表单提交对chrome记住密码的影响
- Play Framework介绍:主要概念(转)
- [Markdown语法][快速入门][CSDN]
- wampserver集成环境和安装
- 安装postgreSQL出现configure: error: zlib library not found解决方法
- 关于linux低端内存
- Android TextView 45°倾斜效果
- Global Mapper24.0汉化中文版下载安装教程
- 邮件服务器1---原理以及基本概念
- Windows 11 找不到文件C:\ProgramData\Package Cache\{xxxx}xxx.exe。请确定文件名是否正确后,再试一次。
- python如何编写温度转换_Python温度转换实例分析
- 计算机存储—大话存储II读书
- android跟随系统切换语言
- JS --引用数据类型
- 告诉你究竟DevOps是什么?
- 浅谈供应链管理SCM的五大功能
- Freeline使用说明
- 促进大数据发展,加强智慧城市建设-思迈特软件
热门文章
- Technodigit.3DReshaper.Meteor.v2017.MR1.Win64 1CD
- 容器化技术与微服务结合---docker(一)
- 半导体ISO26262功能安全合规性开发的3P法则(下)
- re_path和path的区别
- 地球币EAC电脑钱包恢复的方法
- 现在学UI设计有前途吗?UI设计收入大概多少
- android搜索网站,加速 Android的 五大开源网站 codekk.com
- VREP教程--**BubbleRob tutorial**
- python 输入输出重定向_输入输出重定向_清华尹成python入门教程_少儿编程视频-51CTO学院...
- 最全的cmd命令大全