Go+ 命令行子命令使用教程(4.23)

举报
liuzhen007 发表于 2021/12/03 00:04:09 2021/12/03
【摘要】 目录 Go+ 概述 正文 导入包 NewFlagSet 方法 Go+ 概述 Go+ 是一门融合工程开发的 Go、数据科学领域的 Python、编程教学领域的 Scratch,以 Python 之形结合 Go 之心,让工程师处理数据不需要学习新的开发语言,让初学者学习编程、开发作品的门槛更低的编程语言。 正文 像 g...

目录

Go+ 概述

正文

导入包

NewFlagSet 方法


Go+ 概述

Go+ 是一门融合工程开发的 Go、数据科学领域的 Python、编程教学领域的 Scratch,以 Python 之形结合 Go 之心,让工程师处理数据不需要学习新的开发语言,让初学者学习编程、开发作品的门槛更低的编程语言。

正文

像 go 和 gop 工具命令一样,都有许多子命令,每个子命令都有自己的标志集。例如,gop build 和 gop get 就是 gop 工具的两个不同的子命令。flag 包允许我们轻松定义具有自己标志的简单子命令。Go+ 提供了命令行子命令的使用方法,今天我们就来了解一下这方面的一些内容。

导入包

Go+ 在处理子命令行时,一般会使用的工具库是 flag 包,导入方式如下:


  
  1. import (
  2. "flag"
  3. )

NewFlagSet 方法

我们可以使用 NewFlagSet 方法定义自己的子命令,同时为该子命令定义特定的新标志。同一个程序中,我们可以定义多个不同的子命令。

示例代码:


  
  1. package main
  2. import (
  3. "flag"
  4. "os"
  5. )
  6. fooCmd := flag.NewFlagSet("foo", flag.ExitOnError)
  7. fooEnable := fooCmd.Bool("enable", false, "enable")
  8. fooName := fooCmd.String("name", "", "name")
  9. barCmd := flag.NewFlagSet("bar", flag.ExitOnError)
  10. barLevel := barCmd.Int("level", 0, "level")
  11. if len(os.Args) < 2 {
  12. println("expected 'foo' or 'bar' subcommands")
  13. os.Exit(1)
  14. }
  15. switch os.Args[1] {
  16. case "foo":
  17. fooCmd.Parse(os.Args[2:])
  18. println("subcommand 'foo'")
  19. println(" enable:", *fooEnable)
  20. println(" name:", *fooName)
  21. println(" tail:", fooCmd.Args())
  22. case "bar":
  23. barCmd.Parse(os.Args[2:])
  24. println("subcommand 'bar'")
  25. println(" level:", *barLevel)
  26. println(" tail:", barCmd.Args())
  27. default:
  28. println("expected 'foo' or 'bar' subcommands")
  29. os.Exit(1)
  30. }

将上述文件保存成 subcommand.go 文件,然后执行如下命令进行编译:

gop build subcommands.go 

执行如下命令:

./subcommands foo -enable -name=joe a1 a2

输出结果:

subcommand 'foo'
  enable: true
  name: joe
  tail: [a1 a2]

执行如下命令:

./subcommands bar -level 8 a1

输出结果:

subcommand 'bar'
  level: 8
  tail: [a1]

执行如下命令:

./command-line-subcommands bar -enable a1

输出结果:

flag provided but not defined: -enable
Usage of bar:
  -level int
        level

亲自试一试!

 

文章来源: liuzhen.blog.csdn.net,作者:Data-Mining,版权归原作者所有,如需转载,请联系作者。

原文链接:liuzhen.blog.csdn.net/article/details/121668253

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。