go语言的3个包——strconv、os.Args、flag
1. strconv包:

2. os.Args:
获取运行程序时给出的参数,可以通过os包来实现。看代码:
package main import (
"fmt"
"os"
"strconv"
) func main () {
for idx, args := range os.Args {
fmt.Println("参数" + strconv.Itoa(idx) + ":", args)
}
}
在终端运行上面程序的结果:

可以看到,命令行参数包括了程序路径本身,以及通常意义上的参数。
程序中os.Args的类型是 []string ,也就是字符串切片。所以可以在for循环的range中遍历,还可以用 len(os.Args) 来获取其数量。
* 如果不想要输出os.Args的第一个值(可执行文件本身的信息),可以修改上述程序:
for idx, args := range os.Args[1:] {}
将range后面的切片,去掉第一个元素。(切片操作做是“前闭后开”)
再次执行,结果如下:

* 输出切片的所有元素,除了 for循环, 还有更简洁的方式:
// 方式一:
fmt.Println(strings.Join(os.Args[1:], "\n")) // 方式二:
fmt.Println(os.Args[1:])
两种方式ide执行结果对应如下:
3. flag包:
flag包相比单纯的通过os.Args切片分析命令行参数,提供了更强的能力。看个例子:
package main import (
"fmt"
"flag"
) var b = flag.Bool("b", false, "bool类型参数")
var s = flag.String("s", "", "string类型参数") func main() {
flag.Parse()
fmt.Println("-b:", *b)
fmt.Println("-s:", *s)
fmt.Println("其他参数:", flag.Args())
}
在终端cmd上的执行结果:

-----------------------------------------------------------------------------------------------
对于上面的bool型参数b,只有给出和不给出两种情况。需要注意:
var b = flag.Bool("b", false, "bool类型参数")

如果把false改成true——
var b = flag.Bool("b", true, "bool类型参数")

------------------------------------------------------------------------------------------------------------
详解
3.1 定义参数
首先定义待解析命令行参数,也就是以 “-” 开头的参数,比如这里的 -b -s -help等。
-help不需要特别指定,可以自动处理。
这里指定了两个参数,-b 和 -s:
var b = flag.Bool("b", false, "bool类型参数")
var s = flag.String("s", "", "string类型参数")
---原型:
func Bool(name string, value bool, usage string) *bool
func String(name string, value string, usage string) *string
通过 flag.Bool() 和 flag.String(),建立了2个指针 b 和 s,分别指向 bool 类型和 string 类型的变量。所以后续要通过 *b 和 *s 使用变量值。
flag.Bool() 和 flag.String() 的参数有3个,分别是:命令行参数名称,默认值,提示字符串。
| 参数 | 功能 |
|---|---|
| name | 命令行参数名称,比如 -b, -help |
| value | 默认值,未显式指定的参数,给出隐式的默认值,比如本例中-b未给出的话,*b=false |
| usage | 提示信息,如果给出的参数不正确或者需要查看帮助 -help,那么会给出这里指定的字符串 |
3.2 解析参数
flag使用前,必须首先解析:
flag.Parse()
3.3 使用参数
上文已经说明,通过flag方法定义好的参数变量指针,通过间接引用操作即可使用其内容:
fmt.Println("-b:", *b)
fmt.Println("-s:", *s)
3.4 未解析参数
参数中没有按照预定义的参数解析的部分,通过 flag.Args() 即可获取,是一个字符串切片。
fmt.Println("其他参数:", flag.Args())
需要注意的是,从第一个不能解析的参数开始,后面的所有参数都是无法解析的。即使后面的参数中含有预定义的参数:

上面例子中,解析到stop,就已经无法继续解析了,因为stop既不是传给 -b 的布尔值,也不是预定义参数。即使后面给出了预定义好的 -s,也不能获取出来。
拿图说话!! flag提供了Arg(i)和Args()来获取non-flag参数(即未被解析的参数),NArg()来获取non-flag的个数。正如下面看到的:

go语言的3个包——strconv、os.Args、flag的更多相关文章
- Go语言学习之main包的讲解
### Go语言学习之main包的讲解 1.Go中main函数不支持任何返回值 2.可以通过os.Exit(0)来返回状态 func main(){ fmt.Println("hellow ...
- Go语言系列之标准库strconv
Go语言中strconv包实现了基本数据类型和其字符串表示的相互转换. strconv包 strconv包实现了基本数据类型与其字符串表示的转换,主要有以下常用函数: Atoi().Itia().pa ...
- Go语言基础之time包
Go语言基础之time包 时间和日期是我们编程中经常会用到的,本文主要介绍了Go语言内置的time包的基本用法. Go语言中导入包 Go语言中使用import关键字导入包,包的名字使用双引号(”)包裹 ...
- R语言中的数据处理包dplyr、tidyr笔记
R语言中的数据处理包dplyr.tidyr笔记 dplyr包是Hadley Wickham的新作,主要用于数据清洗和整理,该包专注dataframe数据格式,从而大幅提高了数据处理速度,并且提供了 ...
- r语言,安装外部包 警告: 无法将临时安装
安装R语言中的外部包时,出现错误提示 试开URL’https://mirrors.tuna.tsinghua.edu.cn/CRAN/bin/windows/contrib/3.3/ggplot2_2 ...
- go语言基础之导入包的常用方法
1.导入包 示例: 法一 package main //导入包,必须使用,否则编译不过 import "fmt" import "os" func main() ...
- R语言中的机器学习包
R语言中的机器学习包 Machine Learning & Statistical Learning (机器学习 & 统计学习) 网址:http://cran.r-project ...
- R语言—如何安装Github包的解决方法,亲测有效
R语言—如何安装Github包的解决方法,亲测有效 准备安装材料: R包-REmap GitHub下载地址:https://github.com/lchiffon/REmap R包-baidumap ...
- R语言:关于rJava包的安装
R语言:关于rJava包的安装 盐池里的萝卜 2014-09-14 00:53:33 在做文本挖掘的时候,会发现分词时候rJava是必须要迈过去的坎儿,所以进行了总结: 第一步:安装rJava和jd ...
随机推荐
- Mitmproxy的mimdump mimproxy mitmweb命令行性能对比
引用官方的原话如下 Very cool test - thanks for sharing!
- 深度学习面试题21:批量归一化(Batch Normalization,BN)
目录 BN的由来 BN的作用 BN的操作阶段 BN的操作流程 BN可以防止梯度消失吗 为什么归一化后还要放缩和平移 BN在GoogLeNet中的应用 参考资料 BN的由来 BN是由Google于201 ...
- python 日期
python datetime库使用和时间加减计算 来自:https://www.cnblogs.com/linkenpark/p/8079337.html datetime库使用 一.操作当前时间 ...
- JavaScript data types and data structures
JavaScript data types and data structures Programming languages all have built-in data structures, b ...
- js怎么模拟点击网页元素
在测试页面中,引入jquery源文件,并添加一个div标签,一个a标签,为了演示效果a标签暂时不添加地址 通过jquery为div标签绑定一个点击事件,这个事件是被动执行的.意思是要点击才会触发的 在 ...
- KS(Kolmogorov-Smirnov)值
KS(Kolmogorov-Smirnov)值越大,表示模型能够将正.负客户区分开的程度越大.KS值的取值范围是[0,1] ks越大,表示计算预测值的模型区分好坏用户的能力越强. ks值 含义 > ...
- vue-router 利用url传递参数
vue-router 利用url传递参数 :冒号的形式传递参数 在路由配置文件里以:冒号的形式传递参数,这就是对参数的绑定. 1. 在配置文件里以冒号的形式设置参数.我们在/src/router/i ...
- Vue导出ZIP
Export2Zip /* eslint-disable */ require('script-loader!file-saver'); import JSZip from 'jszip' expor ...
- [转][linux][centos]嵌入式 Linux下编译并使用curl静态库
#x86 ./configure --disable-shared --enable-static --disable-ftp --disable-ipv6 --disable-rtsp --disa ...
- 【转】Django继承AbstractUser新建User Model时出现auth.User.groups: (fields.E304)错误
错误详情如下: (venv) D:\workspace\music>python manage.py makemigrations SystemCheckError: System check ...