Golang之命令行操作(第三章)

栏目: Go · 发布时间: 5年前

内容简介:代码实现:依赖 flag和 os 类库,读取执行main方法的参数的个数和参数值flag指向一个命令,os用来获取参数的值和个数完整调用

参考

正文

  1. 进入到项目代码 main包的路径下执行 go install命令,会在 GOPATH/bin路径下面生成一个可执行文件,比如 coin.exe
  2. 然后通过 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()
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法帝国

算法帝国

克里斯托弗•斯坦纳 / 李筱莹 / 人民邮电出版社 / 2014-6 / 49.00

人类正在步入与机器共存的科幻世界?看《纽约时报》畅销书作者讲述算法和机器学习技术如何悄然接管人类社会,带我们走进一个算法统治的世界。 今天,算法涉足的领域已经远远超出了其创造者的预期。特别是进入信息时代以后,算法的应用涵盖金融、医疗、法律、体育、娱乐、外交、文化、国家安全等诸多方面,显现出源于人类而又超乎人类的强大威力。本书是《纽约时报》畅销书作者的又一力作,通过一个又一个引人入胜的故事,向......一起来看看 《算法帝国》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

html转js在线工具
html转js在线工具

html转js在线工具