Args:
os.Args是一个string的切片,可以存储所有的命令行参数(在终端运行才行),
func main() {args := os.Argsfor i, v := range args {fmt.Println("索引:", i, "\t数据:", v)}// 既然是切片,那就可以截取fmt.Println("索引0:", args[0])
}
在终端使用命令执行.go文件,第0个参数是文件本身,后面的是启动可执行文件后传入的参数
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 字节
itzhuzhu@itzhuzhu-MacBook-Pro ~ %
flag:
flag包实现了命令行解析,使用Args拿到命令行参数如果不是按照顺序写的就会有问题,可以使用flag解析,指定名称然后带参数,类似于mysql登录的时候写-u -p一样
func main() {var user stringvar password stringvar host stringvar port int/**参数1:设置对应的标签名,可以通过该标签名来或得对应值参数2:如果没有设置该标签,则采用这个值即该值为默认值参数3:这个参数为帮助信息,一般用于help调用展示&user:接收用户命令行中输入的 -u 后面的参数name:简写value:默认值usage:提示说明,当输入-help或无法解析的命令时将显示说明*/flag.StringVar(&user, "u", "", "用户名用于登录验证,如无,请先注册")flag.StringVar(&password, "p", "", "用户名用于登录验证")flag.StringVar(&host, "h", "localhost", "默认为localhost")flag.IntVar(&port, "port", 8000, "端口号默认8000")// Parse:从args中解析注册的flag。也就是转换的flag.Parse()fmt.Printf("user=%v password=%v host=%v port=%v\n", user, password, host, port)
}
输入一些未知的命令或help就会喜爱是所有字段名称及说明
flag provided but not defined: -hhh
Usage of /var/folders/v7/f9_4jhds6vs03f0mh2j5zhbh0000gn/T/go-build3032839942/b001/exe/main:-h string默认为localhost (default "localhost")-p string用户名用于登录验证-port int端口号默认8000 (default 8000)-u string用户名用于登录验证,如无,请先注册
exit status 2
有默认值的可以不用输入
itzhuzhu@itzhuzhu-MacBook-Pro ~ % go run /Users/itzhuzhu/Desktop/goCode/study/main/main.go -u itzhuzhu -p 0000
user=itzhuzhu password=0000 host=localhost port=8000
自定义的数据将覆盖默认值
itzhuzhu@itzhuzhu-MacBook-Pro ~ % go run /Users/itzhuzhu/Desktop/goCode/study/main/main.go -u itzhuzhu -p 0000 -h 新的host会覆盖吗 -port 800000
user=itzhuzhu password=0000 host=新的host会覆盖吗 port=800000