相信大家都知道go开发一个命令行工具非常简单。
比如像 docker ps 这种不带 - 的参数
又如 ls -l 这种带 - 的参数在go语言中都可以实现
在go语言中给我们提供了flag库
可以接收的类型有

bool、int、int64、uint、uint64、float float64、string、duration

对应的类型都提供了api flag.Type()使用
对于无 - 的参数使用 flag.Args()获取

下面通过一个简单的go程序使用flag
创建一个flag.go 代码如下

package mainimport ("flag""fmt"
)func main() {name := flag.String("name", "juan", "姓名")age := flag.Int("age", 20, "年龄")married := flag.Bool("married", false, "婚否")// 与flag.String效果一样var height stringflag.StringVar(&height, "height", "170", "婚否")// 不Parse是获取不到 不带 - 的参数flag.Parse()args := flag.Args()fmt.Println(*name)fmt.Println(*age)fmt.Println(*married)fmt.Println("--------------------")// 打印没有 - 的参数的个数fmt.Println(flag.NArg())for _, arg := range args {fmt.Println(arg)}
}

打开终端执行 -h

$ go run flag.go -h
Usage of /var/folders/n1/jw6fxyv96c931zndwnkrxcyw0000gn/T/go-build2908420138/b001/exe/flag:-age int年龄 (default 20)-height string婚否 (default "170")-married婚否-name string姓名 (default "juan")
$ go run flag.go  -married -age 25 arg1 arg2 arg3
juan
25
true
--------------------
3
arg1
arg2
arg3

一般类型需要通过 -name value 或者 -name=value 的方式传入参数,对于bool类型的加入参数就是true且后面不需要传value 不加参数就默认值。 对于不加 - 的参数需要放到最末尾,不然会影响获取效果

不加 - 参数放到前面

可以看到结果把 -age也当成arg参数了

$ go run flag.go arg1 -age 25
juan
20
false
--------------------
3
arg1
-age
25

当然,既然是一个命令,希望是在任意的地方都可以执行。最好的是可以在任意操作系统都可以执行
我们可以把它编译成一个二进制文件。

$ go build -o flag flag.go
$ ./flag -age 25 arg1
juan
25
false
--------------------
1
arg1

到这,一个简单的可执行二进制文件就写完了,大家也可以自己去开发一个小工具,有兴趣可以观看如何编写一个curl命令行工具
http://t.csdn.cn/SZE77

如果想在其它操作系统也可以使用需要编译成对于操作系统的可执行文件,比如windows的exe文件
mac系统下编译成linux,windows

#linuxCGO_ENABLED=0 GOOS=linux GOARCH=amd64  go build  -o name   main.go#windowsCGO_ENABLED=0 GOOS=windows GOARCH=amd64  go build  -o name  main.go

Linux 下编译 Mac、 Windows

#MacCGO_ENABLED=0 GOOS=darwin GOARCH=amd64  go build  -o name   main.go#WindowsCGO_ENABLED=0 GOOS=windows GOARCH=amd64  go build  -o name   main.go

Windows 下编译 Mac 、Linux

#MacSET CGO_ENABLED=0SET GOOS=darwinSET GOARCH=amd64go build  -o name   main.go# LinuxSET CGO_ENABLED=0SET GOOS=linuxSET GOARCH=amd64go build  -o name   main.go

欢迎关注,学习不迷路!

go语言中flag库使用相关推荐

  1. c语言中 flag.bit7,利用proteus学习ARM(LPC2103)之二:熟悉IAR C语言开发环境

    1. 关于C语言中数据类型的长度问题 我们应该比较熟悉51系列的C语言数据类型的长度,如下表所示: 数据类型 长 度 值 域 unsigned char 单字节 0-255 signed char 单 ...

  2. c语言中math的库函数,C语言中math.h库中的常用函数

    C语言中math.h库中的常用函数 int abs(int i) 返回整型参数i的绝对值 double cabs(struct complex znum) 返回复数znum的绝对值 double fa ...

  3. 不属于python第三方库_在 Python 语言中,不属于机器学习领域第三方库的是______。???????????????????????????????????????...

    在 Python 语言中,不属于机器学习领域第三方库的是______.??????????????????????????????????????? 答:Arcade 图的遍历方法有两种:深度优先搜索 ...

  4. c语言中fiag的作用,flag是什么意思C语言,给自己立flag是什么梗!

    现今的网络用语实在太多,很多我们都不知道是什么意思,小编问大家知道flag是什么意思吗?flag是什么梗吗?一起来看看. 很多人经常会说,我今天不小心立了一个flag,感觉自己真的是乌鸦嘴啊!或者说f ...

  5. c语言表达式(a b)的值,C语言中,假设所有变量均为整型,表达式(a=5,b=2,++a,b++,a+ - 问答库...

    问题: [单选] C语言中,假设所有变量均为整型,表达式(a=5,b=2,++a,b++,a+b)的值是(). A . 10 B . 9 C . 8 D . 7 教师在讲解高中语文必修(5)<逍 ...

  6. c语言输入10个数从小,C语言中,从键盘输入10个数,从小到大排列输出,怎

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:C语言中,从键盘输入10个数,从小到大排列输出,怎么写啊,最好注回答:#includestdio.h void swap(int * ...

  7. c+语言+null,C/C++语言中NULL、'\0’和0的区别

    NULL.'\0'和0的值是一样的,都是0,不过它们的表现形式不一样: 1. NULL: 即空指针,不过在C和C++中并不一样.在VS 2013的库文件string.h中可以看到如果定义. 1 /* ...

  8. c语言中的if语句_If ... C中的其他语句解释

    c语言中的if语句 Conditional code flow is the ability to change the way a piece of code behaves based on ce ...

  9. c语言中getche的用法,c语言中getch的用法

    [www.hywsbj.com--图表展板] getch()函数是无回显的从控制台取得一个字符.以利用getch()函数让程序调试运行结束后等待编程者按下键盘才返回编辑界面,即任意键继续效果.下面小编 ...

最新文章

  1. c语言提取七位数讲解,输入一个七位数将这个数的奇位数重新组合成新的四位数并输出的编程怎么写    在线等急...
  2. windows11安装不了怎么回事,电脑如何安装win11
  3. java day05【数组】
  4. UFW、firewall、iptables防火墙配置
  5. php pdf怎么转换成jpg图片,如何在线将pdf转换成jpg图片格式?
  6. 小白学java-JVM知识点总结
  7. 百度富文本编辑器上传图片到oss的步骤
  8. Bandicam班迪录屏 高清录制视频软件
  9. 对camera的计划
  10. RabbitMQ学习笔记:高级特性TTL(过期时间)
  11. [MOVE]-音频翻唱检索论文笔记
  12. java.lang.IllegalArgumentException异常
  13. 微分方程零解稳定性matlab,微分方程零解及稳定性.doc
  14. k8s(四):核心技术-Controller
  15. 许永鑫 南京理工大学计算机学院,南京理工大学计算机学院导师介绍:付安民...
  16. 『网易实习』周记(三)
  17. ShardingSphere笔记(一): 经验和踩坑总结
  18. Kafka:部署Kafka
  19. 服务器u.2接口固态硬盘,固态硬盘的U.2接口为何物
  20. Python数据分析学习四 NumPy基础:数组和矢量计算

热门文章

  1. 什么是云效,云原生时代新 DevOps 平台
  2. 上海旅游-徐家汇教堂
  3. 动态规划最好的讲解之一 | 算法干货
  4. 从零开始学习塞班S60v5的开发
  5. 【天池大赛】淘宝直播商品识别
  6. linux发邮件到126,使用126邮箱发送邮件的python脚本
  7. 在计算机中 云 是什么意思,电脑中的云是什么意思?
  8. kaggle中关于图像的比赛整理
  9. JavaScript入门笔记(带源文件)
  10. IDL文件读写(七)