如何在Go语言中使用flag包对命令行进行参数解析flag 是Go 标准库提供的解析命令行参数的包 。
使用方式:
flag.Type(name, defValue, usage)
其中Type为String, Int, Bool等;并返回一个相应类型的指针 。
flag.TypeVar(flagvar, name, defValue, usage)
将flag绑定到一个变量上 。
27.Go 解析命令行参数标准库中的flag包用于解析命令行参数:
上面的输出是调用go run $ file -echo echo-arg Additional arg的结果 。
定义参数
假设你的程序有一个-retries整数选项 。
你可以使用以下标志包注册此类选项:
还有其他常见类型的功能:
POSIX variant --retries or Windows variant /retries are not recognized.
For boolean values you can say: -help (implicitly true), -help=true or -help=false.
-help false is not a valid form for boolean variables.
Parsing and accessing remaining arguments
After parsing arguments, call flag.Parse().
Parsing fails if:
unknown flag was given on command-line
a flag didn’t parse based on its type (e.g. it was registered as int but the value was not a valid number)
In case of failure, help text describing flags is shown and program exits with error code 2.
You can explicitly print help text using flag.Usage(). This is often triggered by -help flag.
Help text is based on usage text provided in flag.IntVar and others.
Command-line arguments that don’t start with - are untouched and can be accessed with flag.Args().
flag包缺少的功能:
no support for POSIX style --name, only -name is supported
no support for short alternatives e.g. -n being synonym with --name
no suport for Windows style /name
If you need those features, your options are:
access raw cmd-line arguments
use a third party library
If flag package or a third-party library doesn’t provide the features you want, you can parse the arguments yourself.
The above output is a result of go run $file -echo echo-arg additional arg.
Raw command-line arguments can be accessed via []string slice os.Args.
First element is name of the executable.
Remaining elements are cmd-line arguments as decoded by OS shell.
On Windows cmd-line arguments are a single UTF-16 Unicode string.
Go runtime converts them to UTF-8 string and splits into separate arguments to unify handling across different operating systems.
Functionaly provided by standard library package flag is limited.
其他提供了命令行参数解析的库:
写命令行应用程序什么不可或缺?Go可以这样处理命令行参数 Go语言内置的flag包实现了命令行参数的解析,flag包使得开发命令行工具更为简单 。
如果你只是简单的想要获取命令行参数 , 可以像下面的代码示例一样使用os.Args来获取命令行参数 。
将上面的代码执行go build -o "args_demo"编译之后 , 执行:
os.Args是一个存储命令行参数的字符串切片,它的第一个元素是执行文件的名称 。
本文介绍了flag包的常用函数和基本用法,更详细的内容请查看官方文档 。
flag包支持的命令行参数类型有bool、int、int64、uint、uint64、float float64、string、duration 。
有以下两种常用的定义命令行flag参数的方法 。
基本格式如下:
flag.Type(flag名, 默认值, 帮助信息)*Type 例如我们要定义姓名、年龄、婚否三个命令行参数,我们可以按如下方式定义:
需要注意的是,此时name、age、married、delay均为对应类型的指针 。
基本格式如下: flag.TypeVar(Type指针, flag名, 默认值, 帮助信息) 例如我们要定义姓名、年龄、婚否三个命令行参数,我们可以按如下方式定义:
通过以上两种方法定义好命令行flag参数后,需要通过调用flag.Parse()来对命令行参数进行解析 。
支持的命令行参数格式有以下几种:
其中,布尔类型的参数必须使用等号的方式指定 。
Flag解析在第一个非flag参数(单个”-“不是flag参数)之前停止,或者在终止符”–“之后停止 。
定义
使用
命令行参数使用提示:
$ ./flag_demo -help
Usage of ./flag_demo:
-age int
年龄 (default 18)
-d duration
时间间隔
-married
婚否
-name string
姓名 (default "张三")
正常使用命令行flag参数:
使用非flag命令行参数:
原文链接:
go语言有支持正则表达式后向引用的方法吗go语言有支持正则表达式后向引用go语言命令行参数的方法go语言命令行参数 , 方法如下
package main
import (
"fmt"
"os"
"path/filepath"
"regexp"
)
func main() {
// 命令行参数
args := os.Args
// 检查参数
if len(args) == 1 {
【go语言命令行参数 go语言执行】fmt.Println("ff is a file find tool. use like bottom")
fmt.Println("ff [dir] [regexp]")
return
}
if len(args)3 {
fmt.Println("args3")
return
}
fileName := args[1]
pattern := args[2]
file, err := os.Open(fileName)
if err != nil {
fmt.Println(err)
return
}
fi, err := file.Stat()
if err != nil {
fmt.Println(err)
return
}
if !fi.IsDir() {
fmt.Println(fileName, " is not a dir")
}
reg, err := regexp.Compile(pattern)
if err != nil {
fmt.Println(err)
return
}
// 遍历目录
filepath.Walk(fileName,
func(path string, f os.FileInfo, err error) error {
if err != nil {
fmt.Println(err)
return err
}
if f.IsDir() {
return nil
}
// 匹配目录
matched := reg.MatchString(f.Name())
if matched {
fmt.Println(path)
}
return nil
})
}
go语言命令行参数的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于go语言执行、go语言命令行参数的信息别忘了在本站进行查找喔 。
推荐阅读
- 发直播图片文案,发直播图片文案搞笑
- GIS避雷器压互耐压,gis避雷器试验
- 直播试播文案,直播试播怎么说
- 球球大作战源代码java 球球大作战游戏代码
- linux命令host的简单介绍
- 怎么做课表小程序,制作课程表的小程序
- excel怎么做饼状图,excel做饼状图如何把数据带出来
- c语言fft函数 c语言ffffff
- flutter_boost头文件不存在,builtin popcount头文件