以太坊代码标准是什么_Go-ethereum代码规范

1.目录结构

本项目主要使用spring来管理对象,使用netty完成通信,使用leveldb负责存储,整体的包的结构如下所示:

accounts             实现了一个高等级的以太坊账户管理

bmt           二进制的默克尔树的实现

build            主要是编译和构建的一些脚本和配置

cmd           命令行工具,又分了很多的命令行工具,下面一个一个介绍

/abigen           源代码生成器,将Etalum合同定义转换为易于使用的、编译时类型安全的Go包。

/bootnode         启动一个仅仅实现网络发现的节点

/evm          以太坊虚拟机的开发工具, 用来提供一个可配置的,受隔离的代码调试环境

/faucet

/geth          以太坊命令行客户端,最重要的一个工具

/p2psim        提供了一个工具来模拟http的API

/puppeth         创建一个新的以太坊网络的向导

/rlpdump         提供了一个RLP数据的格式化输出

/swarm         swarm网络的接入点

/util            提供了一些公共的工具

/wnode         这是一个简单的Whisper节点。 它可以用作独立的引导节点。此外,可以用于不同的测试和诊断目的。

common            提供了一些公共的工具类

compression PackageRle 实现了用于Etalum数据的游程编码。

consensus         提供了以太坊的一些共识算法,比如ethhash, clique(proof-of-authority)

console console      类

contracts

core            以太坊的核心数据结构和算法(虚拟机,状态,区块链,布隆过滤器)

crypto            加密和hash算法,

eth            实现了以太坊的协议

ethclient           提供了以太坊的RPC客户端

ethdb          eth的数据库(包括实际使用的leveldb和供测试使用的内存数据库)

ethstats         提供网络状态的报告

event          处理实时的事件

les            实现了以太坊的轻量级协议子集

light             实现为以太坊轻量级客户端提供按需检索的功能

log               提供对人机都友好的日志信息

metrics           提供磁盘计数器

miner           提供以太坊的区块创建和挖矿

mobile            移动端使用的一些warpper

node            以太坊的多种类型的节点

p2p            以太坊p2p网络协议

rlp              以太坊序列化处理

rpc             远程方法调用

swarm          swarm网络处理

tests           测试

trie             以太坊重要的数据结构Package trie implements Merkle Patricia Tries.

whisper          提供了whisper节点的协议。

可以看到以太坊的代码量还是挺大的,但是粗略看,代码结构还是挺好的。此外根目录下还包含了一些构建工程用的makefile、README等文件。

2.命名、接口定义规范

(1)命名

如上图所示,文件名命名清晰简洁,主要为英文及英文缩写,符合代码命名的一般规范。且符合整个应用或包的主入口文件应当是 main.go 或与应用名称简写相同的命名规范。

如上图所示,变量命名基本上遵循相应的英文表达或简写,且符合驼峰命名法这一GoLang语言命名规范。

函数命名符合驼峰式命名,且函数名是动词或动词短语,如postPayment、deletePage、save。而类名是名词或名词短语,这些都属于GoLang语言的命名规范

(2)接口定义

3.单元测试组织形式

单元测试文件名命名为 example_test.go,符合命名规范,测试用例的函数名称以Test开头,如TestEventString,符合命名规范。目录中单元测试文件紧跟在对应单元之后,结合命名规范,对应关系一目了然,简洁清晰。

4.GO语言代码规范和风格的一般要求

(1)代码组织结构

a.一个目录只包含一个包,模块复杂拆分子模块/子目录

b.内部项目GOPATH如果指向多个工作目录。公开项目为第一个工作区间(即go get默认下载到第一个目录)

c.非测试文件(*_test.go)禁止使用,简化包

d.禁止相对路径导入包

e.建议goimports或者IDE管理import

f.项目rep需要包含所有的代码,依赖库放在vendor下

g.建议使用Golide,Godep管理第三方包

h.总而言之:组织结构需要简化,一目了然,允许多个工作区间,但是环境变量的第一个工作区间必须是公开的项目,最好使用一个工作区间,不要建立相对路径的包,最好用godep等依赖库控制工具来管理依赖库,每个项目所有的依赖库最好放在本目录vendor下。

(2)代码命名规范

a.包名命名规则:包名应该为小写单词,不要使用下划线或者混合大小写。

b.文件命名:尽量采取有意义的文件名,简短,有意义,应该为小写单词,使用下划线分隔各个单词。

c.结构体命名:采用驼峰命名法,首字母根据访问控制大写或者小写struct 申明和初始化格式采用多行声明。

d.接口命名:单个函数的接口名以“er”作为后缀,接口的实现则去掉“er”;两个函数的接口名综合两个函数名,以“er”作为后缀,接口的实现则去掉“er”;三个以上函数的接口,抽象这个接口的功能,类似于结构体命名。

e.变量命名:和结构体类似,变量名称一般遵循驼峰法,首字母根据访问控制原则大写或者小写,但遇到特有名词时,需要遵循以下规则:如果变量为私有,且特有名词为首个单词,则使用小写,如 apiClient,其它情况都应当使用该名词原有的写法,如 APIClient、repoID、UserID。若变量类型为 bool 类型,则名称应以Has, Is, Can或Allow开头。避免全局变量多使用,for循环可用单字母。

f.常量命名:常量均需使用全部大写字母组成,并使用下划线分词,如果是枚举类型的常量,需要先创建相应类型。

g.总而言之,文件名和目录名,包名都必须小写。数据类型变量和参数等定义最好使用驼峰大小写法,不要使用下划线或者中划线

(3)代码风格

a.缩进和折行:缩进直接使用 gofmt 工具格式化即可(gofmt是使用tab缩进的);折行方面,一行最长不超过120个字符,超过的请使用换行展示,尽量保持格式优雅。

b.语句的结尾:Go语言中是不需要类似于Java需要冒号结尾,默认一行就是一条数据;如果你打算将多个语句写在同一行,它们则必须使用 ;分割。

c.括号和空格:括号和空格方面,也可以直接使用 gofmt 工具格式化(go会强制左大括号不换行,换行会报语法错误),所有的运算符和操作数之间要留空格。

d.测试:单元测试文件名命名规范为 example_test.go。测试用例的函数名称必须以Test开头,例如:TestExample。每个重要的函数都要首先编写测试用例,测试用例和正规代码一起提交方便进行回归测试

(4)工具

a.gofmt:大部分的格式问题可以通过gofmt解决,gofmt自动格式化代码,保证所有的go代码与官方推荐的格式保持一致,于是所有格式有关问题,都以gofmt的结果为准。

b.go vet:vet工具可以帮我们静态分析我们的源码存在的各种问题,例如多余的代码,提前return的逻辑,struct的tag是否符合标准等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值