内容简介:代码实现:依赖 flag和 os 类库,读取执行main方法的参数的个数和参数值flag指向一个命令,os用来获取参数的值和个数完整调用
参考
正文
- 进入到项目代码 main包的路径下执行 go install命令,会在 GOPATH/bin路径下面生成一个可执行文件,比如 coin.exe
- 然后通过 coin 命令 参数的形式执行 go 代码,每次输入一次,都表示执行一次main方法(支持带参数的执行main方法),而不是启动一个进程持续监听
代码实现:依赖 flag和 os 类库,读取执行main方法的参数的个数和参数值
flag指向一个命令,os用来获取参数的值和个数
- 默认命令算一个参数 比如 coin addCoin 命令就是2个参数
func (cli *CLI) validateArgs() { if len(os.Args) < 2 { cli.printUsage() os.Exit(1) } }
完整调用
// 入口,会完成NewBlockchain的初始化(新链的话,就创建一个创世币,老链的话,就读取数据库,加载到内存中) func main() { bc := NewBlockchain() defer bc.db.Close() cli := CLI{bc} cli.Run() }
根据命令执行相应的响应
func (cli *CLI) Run() { cli.validateArgs() addBlockCmd := flag.NewFlagSet("addblock", flag.ExitOnError) printChainCmd := flag.NewFlagSet("printchain", flag.ExitOnError) addBlockData := addBlockCmd.String("data", "", "Block data") switch os.Args[1] { case "addblock": err := addBlockCmd.Parse(os.Args[2:]) if err != nil { log.Panic(err) } case "printchain": err := printChainCmd.Parse(os.Args[2:]) if err != nil { log.Panic(err) } default: cli.printUsage() os.Exit(1) } if addBlockCmd.Parsed() { if *addBlockData == "" { addBlockCmd.Usage() os.Exit(1) } cli.bc.AddBlock(*addBlockData) } if printChainCmd.Parsed() { cli.printChain() } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Vim 跨行操作与 Ex 命令操作范围
- Docker 常用操作命令
- npm常用命令与操作
- linux 操作 ftp 常用命令
- 通过命令curl 操作ElasticSearch指南
- Docker基础命令详解——镜像及容器操作
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。