兄弟连Go语言+区链技术培训以太坊源码分析(39)geth启动流程分析geth是我们的go-ethereum最主要的一个命令行工具
也是我们的各种网络的接入点(主网络main-net测试网络test-net和私有网络)
支持运行在全节点模式或者轻量级节点模式
其他程序可以通过它暴露的JSONRPC调用来访问以太坊网络的功能
如果什么命令都不输入直接运行geth
就会默认启动一个全节点模式的节点
连接到主网络
我们看看启动的主要流程是什么,涉及到了那些组件
##启动的main函数cmd/geth/main
go看到main函数一上来就直接运行了
最开始看的时候是有点懵逼的
后面发现go语言里面有两个默认的函数,一个是main()函数
一个是init()函数
go语言会自动按照一定的顺序先调用所有包的init()函数
然后才会调用main()函数
funcmain(){iferr:=app
Run(os
Args);err
=nil{fmt
Fprintln(os
Stderr,err)os
Exit(1)}}main
go的init函数app是一个三方包gopkg
in/urfave/cli
这个三方包的用法大致就是首先构造这个app对象
通过代码配置app对象的行为,提供一些回调函数
然后运行的时候直接在main函数里面运行app
Run(os
Args)就行了
import(
"gopkg
in/urfave/cli
v1")var(app=utils
NewApp(gitCommit,"thego-ethereumcommandlineinterface")//flagsthatconfigurethenodenodeFlags=[]cli
Flag{utils
IdentityFlag,1/9utils
UnlockedAccountFlag,util