golang flag 解析入参
来源:互联网 发布:斯米诺黑牌伏特加知乎 编辑:程序博客网 时间:2024/06/05 09:31
首先一个例子:
package mainimport ( "fmt" "flag")func main(){ data_path := flag.String("D","/home/manu/sample/","DB data path") log_file := flag.String("l","/home/manu/sample.log","log file") nowait_flag :=flag.Bool("W",false,"do not wait until operation completes") flag.Parse() var cmd string = flag.Arg(0); fmt.Printf("action : %s\n",cmd) fmt.Printf("data path: %s\n",*data_path) fmt.Printf("log file : %s\n",*log_file) fmt.Printf("nowait : %v\n",*nowait_flag) fmt.Printf("-------------------------------------------------------\n") fmt.Printf("there are %d non-flag input param\n",flag.NArg()) for i,param := range flag.Args(){ fmt.Printf("#%d :%s\n",i,param) }}
OK,我们分析下代码(分割线下面的我们暂时不看):
第一行对应的是data_path的解析规则
-D选项对应的值是字符串类型字符串,
默认值是“/home/manu/sample”,
DB data path提示信息或者help信息或者说明是。
manu@manu-hacks:~/code/go/self$ go run pg_ctl_parse.go -D /home/manu/DB_data/ -l /home/manu/DB_data/postgres_manu.log -W startaction : startdata path: /home/manu/DB_data/log file : /home/manu/DB_data/postgres_manu.lognowait: true-------------------------------------------------------there are 1 non-flag input param#0:startmanu@manu-hacks:~/code/go/self$ go run pg_ctl_parse.go -l=/home/manu/DB_data/postgres_manu.log -W -D /home/manu/DB_data/ startaction : startdata path: /home/manu/DB_data/log file : /home/manu/DB_data/postgres_manu.lognowait: true-------------------------------------------------------there are 1 non-flag input param#0:start
我们看到了,解析出了data_path,log_file无论 -l -D出现的顺序如何,只要正常的出现了,就能正常的解析。
但是晴朗的天空中也有一片乌云,start不是这种 -key=alue 或则-option的类型,flag是解析不了的。我们称这种参数为non-flag参数,flag解析遇到non-flag参数就停止了:
s := f.args[0]if len(s) == 0 || s[0] != '-' || len(s) == 1 { return false, nil}
所以如果我们将non-flag参数放在最前面,flag什么也不会解析,因为flag遇到了这个就停止解析了。
manu@manu-hacks:~/code/go/self$ go run pg_ctl_parse.go start -l=/home/manu/DB_data/postgres_manu.log -W -D /home/manu/DB_data/ action : startdata path: /home/manu/samplelog file : /home/manu/sample.lognowait : false-------------------------------------------------------there are 5 non-flag input param#0:start#1:-l=/home/manu/DB_data/postgres_manu.log#2:-W#3:-D#4:/home/manu/DB_data/
OK,flag提供了Arg(i),Args()来获取non-flag参数,NArg()来获取non-flag的个数。正如我们们sample 代码看到的。
fmt.Printf("there are %d non-flag input param\n",flag.NArg()) for i,param := range flag.Args(){ fmt.Printf("#%d :%s\n",i,param) }
flag还提供了NFlag()获取那些匹配上的参数的个数。
从例子上看,flag package很有用,但是并没有强大到解析一切的程度。
如果你有类似-option或者-key =value这种参数,不妨试试 flag。如果你的入参解析非常复杂,flag可能捉襟见肘。
阅读全文
0 0
- golang flag 解析入参
- golang编程之package flag 解析入参
- golang flag标准库命令行参数解析
- Golang: 使用flag包进行命令行参数解析
- golang flag 用法示例
- golang flag 加强版
- Golang学习笔记--flag包
- cmdline-扩展golang std.flag
- golang之flag简单使用方法
- intent flag 解析
- 命令行解析:flag
- Golang flag包使用详解(一)
- GOlang中对flag.Prase()的疑问
- 初生牛犊不怕虎 golang入坑系列
- GO语言flag参数解析
- GoLang之命令行使用方法——flag package
- 加油干 golang入坑系列
- golang 解析cvs文件
- Java提高篇(37)--线程池
- Android开发艺术探索学习笔记3——View的事件体系
- Android AES加密的NDK实现
- 自定义view圆形进度条
- nginx做前端,apache作为后端的方案
- golang flag 解析入参
- bootstrap tips
- entities与primitive的区别
- Oracle 12c R2版本 Application Containers 特性(一)
- Java 调用 Rest api 设置经典 Linux 虚拟机的实例启停
- linux安装mysql
- 刮刮乐小游戏
- 理解RESTful架构
- 自定义TextView自定义,点击生成随机数