os.Args是一个string的切片,可以存储所有的命令行参数(在终端运行才行)
func main() {
args := os.Args
for i, v := range args {
fmt.Println("索引:", i, "\t数据:", v)
}
// 既然是切片,那就可以截取
fmt.Println("索引0:", args[0])
}
在终端使用命令执行.go文件,第1个参数是可执行文件本身,后面的是启动可执行文件后传入的参数
itzhuzhu@itzhuzhu-MacBook-Pro ~ % go run /Users/itzhuzhu/Desktop/goCode/study/main/main.go 我会被打印出来吗 空格喽
索引: 0 数据: /var/folders/v7/f9_4jhds6vs03f0mh2j5zhbh0000gn/T/go-build2830246341/b001/exe/main
索引: 1 数据: 我会被打印出来吗
索引: 2 数据: 空格喽
索引0: /var/folders/v7/f9_4jhds6vs03f0mh2j5zhbh0000gn/T/go-build2830246341/b001/exe/main
上传文件小案例
func main() {
args := os.Args
// 因为规定了上传文件需要携带至少一个的文件路径,所以需要在这里判断一下上传的文件数是否满足格式
if len(args) != 2 {
return
}
//提取文件名
path := args[1]
// os.Stat:可以获取文件属性
stat, err := os.Stat(path)
if err != nil {
fmt.Println("os.Stat 出错了:", err)
return
}
fmt.Println("文件名:", stat.Name())
fmt.Println("文件大小:", stat.Size(),"字节")
}
输出:
itzhuzhu@itzhuzhu-MacBook-Pro ~ % go run /Users/itzhuzhu/Desktop/goCode/study/main/main.go /Users/itzhuzhu/Desktop/笔记/test.txt
文件名: test.txt
文件大小: 37 字节
flag包实现了命令行解析,使用Args拿到命令行参数如果不是按照顺序写的就会有问题,可以使用flag解析,指定名称然后带参数,类似于mysql登录的时候写-u -p一样
命令行参数的格式
-参数名 参数值
-参数名=参数值
-参数名:参数值
flag.TypeVar():定义一个指定类型的命令行参数
func StringVar(p *string, name string, value string, usage string) {
CommandLine.Var(newStringValue(value, p), name, usage)
}
P:指向变量的指针,用来存储命令行参数的值
name:命令行参数的名称,例如"-name"
value:命令行参数的默认值,如果没有传入该参数,则使用默认值
usage:命令行参数的说明,例如"-name是您的用户名"
演示:
func main() {
var user string
var password string
flag.StringVar(&user, "u", "", "请输入用户名")
flag.StringVar(&password, "p", "", "请输入密码")
// flag.Parse():解析命令行参数
flag.Parse()
fmt.Println("user:", user)
fmt.Println("password:", password)
}
输出:
itzhuzhu@itzhuzhu-MacBook-Pro main % go run main.go -u itzhuzhu -p itzhuzhu
user: itzhuzhu
password: itzhuzhu
如果直接执行程序不输入字段和值,会打印出所有字段的默认值
itzhuzhu@itzhuzhu-MacBook-Pro main % go run main.go
user:
password:
输入非指定的命令,会显示所字段的自定义提示
itzhuzhu@itzhuzhu-MacBook-Pro main % go run main.go -abc haha
flag provided but not defined: -abc
Usage of /var/folders/v7/f9_4jhds6vs03f0mh2j5zhbh0000gn/T/go-build547939883/b001/exe/main:
-p string
请输入密码
-u string
请输入用户名
exit status 2