go_命令行参数Args、flag

Args:

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:

flag包实现了命令行解析,使用Args拿到命令行参数如果不是按照顺序写的就会有问题,可以使用flag解析,指定名称然后带参数,类似于mysql登录的时候写-u -p一样

  • flag.Args():返回命令行参数后的其他参数,以[]string类型
  • flag.NArg():返回命令行参数后的其他参数个数
  • flag.NFlag():返回使用的命令行参数个数

命令行参数的格式

-参数名 参数值
-参数名=参数值
-参数名:参数值

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

你可能感兴趣的:(Golang,go,Args,flag,命令行参数)