主页 > imtoken体验版 > 什么是以太坊代码标准_Go-ethereum代码规范
什么是以太坊代码标准_Go-ethereum代码规范
1.目录结构
本项目主要使用spring管理对象以太坊的字母是什么,使用netty完成通信,使用leveldb存储。 整体包结构如下:
accounts 实现高级以太坊账户管理
bmt 二叉 Merkle 树实现
build主要是编译构建的一些脚本和配置
cmd命令行工具分为很多命令行工具,下面一一介绍。
/abigen 将以太坊合约定义转换为易于使用、编译时类型安全的 Go 包的源代码生成器。
/bootnode 启动一个只实现网络发现的节点
/evm 以太坊虚拟机的开发工具,用于提供可配置的、隔离的代码调试环境
/龙头
/geth 以太坊命令行客户端,最重要的工具
/p2psim 提供模拟http API的工具
/puppeth 用于创建新以太坊网络的向导
/rlpdump 提供 RLP 数据的格式化输出
/swarm swarm 网络的接入点
/util 提供了一些常用的工具
/wnode 这是一个简单的 Whisper 节点。 它可以用作独立的引导节点。 此外,它可以用于不同的测试和诊断目的。
common 提供一些公共工具类
compression PackageRle 为以太坊数据实现游程编码。
consensus 提供了以太坊的一些共识算法,比如ethhash,clique(proof-of-authority)
控制台控制台类
合同
coreEthereum的核心数据结构和算法(虚拟机、状态、区块链、布隆过滤器)
密码加密和哈希算法,
eth 实现以太坊协议
ethclient 为以太坊提供一个 RPC 客户端
ethdb eth的数据库(包括实际使用的leveldb和测试用的内存数据库)
ethstats 提供网络状态报告
event 处理实时事件
les 实现了以太坊的轻量级配置文件
light为以太坊轻客户端实现按需检索功能
log 提供人机友好的日志信息
指标提供磁盘计数器
矿工为以太坊提供区块创建和挖掘
mobile 移动端使用的一些wrapper
node 以太坊的各类节点
p2p 以太坊 p2p 网络协议
rlp 以太坊序列化处理
rpc远程方法调用
蜂群网络处理
测试测试
Trie 以太坊的重要数据结构 Package trie 实现了 Merkle Patricia Tries。
whisper 为 whisper 节点提供协议。
可以看出以太坊的代码量还是挺大的,但是一眼看去,代码结构还是挺不错的。 此外,根目录下还包含一些构建项目的makefile、README等文件。
2.命名、接口定义规范
(一)命名
如上图所示,文件名清晰简洁,以英文和英文缩写为主,符合代码命名的一般规范。 而符合整个应用或包的主入口文件应该是main.go或与应用名称缩写相同的命名规范。
如上图所示,变量命名基本遵循对应的英文表达或缩写,符合驼峰式命名的GoLang语言命名规范。
函数命名符合驼峰命名,函数名是动词或动词短语,如postPayment、deletePage、save。类名是名词或名词短语,属于GoLang语言的命名规范
(2) 接口定义
3.单元测试组织
单元测试文件名为example_test.go,符合命名规范。 测试用例的函数名以Test开头,如TestEventString,符合命名规范。 目录中的单元测试文件紧跟在相应的单元之后。 结合命名规范,对应关系一目了然,简洁明了。
4. GO语言代码规范和风格的一般要求
(一)代码组织结构
a目录只包含一个包,模块复杂拆分成子模块/子目录
b. 内部项目 GOPATH 如果指向多个工作目录。 public项目为第一个工作空间(即go get downloads默认到第一个目录)
c.非测试文件(*_test.go)禁止使用,简化包
d.禁用相对路径导入包
e. 建议使用 goimports 或 IDE 来管理导入
f.project rep需要包含所有代码,依赖库放在vendor下
g.推荐使用Golide、Godep管理第三方包
H。 总而言之:组织架构要精简,一目了然。 允许有多个工作空间,但环境变量的第一个工作空间必须是公共项目。 最好使用工作区。 不要创建具有相对路径的包。 最好使用godep等依赖库控制工具来管理依赖库。 每个项目的所有依赖库最好放在vendor这个目录下。
(2)代码命名规范
一种。 包名命名规则:包名应为小写单词,不要使用下划线或大小写混合。
b. 文件命名:尽量取有意义的文件名,简短而有意义,最好是小写单词,每个单词用下划线分隔。
C。 结构命名:采用CamelCase命名方式,根据访问控制首字母大写或小写。 结构声明和初始化格式采用多行声明。
d. 接口命名:单个函数的接口名以“er”为后缀,接口的实现去掉“er”; 两个函数的接口名合并了两个函数名,以“er”为后缀,接口的实现去掉了“er”。 》;以上三个函数的接口,抽象出这个接口的函数,类似结构体命名。
e. 变量命名:与结构体类似,变量名一般遵循驼峰命名法,首字母大写或小写根据访问控制原则。 但是,遇到专有名词时以太坊的字母是什么,需要遵循以下规则:如果变量是private且专有名词是第一个词,则使用小写,如apiClient,其他情况使用名词原写法,例如 APIClient、repoID 和 UserID。 如果变量类型为 bool 类型,名称应以 Has、Is、Can 或 Allow 开头。 避免多次使用全局变量,for 循环可以使用单个字母。
F。 常量命名:所有常量必须全部由大写字母组成,并使用下划线分词。 如果是枚举类型的常量,需要先创建对应的类型。
G。 总之,文件名、目录名、包名都必须小写。数据类型变量和参数的定义最好使用驼峰式,不要使用下划线或破折号
(3)代码风格
一种。 Indentation and line breaks:Indentation可以直接用gofmt工具格式化(gofmt使用tab缩进); 在换行方面,一行的最大长度不应超过 120 个字符。 如果超出,请使用换行显示,尽量保持格式优雅。
b. 声明的结尾:Go语言和Java类似不需要在结尾加冒号。 默认情况下,一行是一条数据; 如果你打算在同一行写多个语句,它们必须用;隔开。
C。 中括号和空格:关于中括号和空格,也可以直接用gofmt工具格式化(go会强制左大括号不换行,换行会报语法错误),必须留空格所有运算符和操作数之间。
d. 测试:单元测试文件名命名约定为example_test.go。 测试用例的函数名必须以Test开头,例如:TestExample。每个重要的功能都必须先写一个测试用例,测试用例与正式代码一起提交进行回归测试
(4) 工具
一种。 gofmt:大多数格式问题都可以通过 gofmt 解决。 gofmt 自动对代码进行格式化,保证所有的go代码都与官方推荐的格式一致。 因此,所有与格式相关的问题均以 gofmt 的结果为准。
b. go vet:vet工具可以帮助我们静态分析源代码中的各种问题,比如冗余代码、提前返回逻辑、struct标签是否符合标准等。