前言大家好,我是码农,周五,这次我来说说Go语言中比较常用的包flag包.这个包的目的是接收命令行参数。如果你玩过Mysql,你一定对这个界面不陌生。正是为了这个目的,接收命令行参数。注意本章学习的任何代码都必须编译成.exe运行,禁止右键运行!!os.Args其实Go的os模块也有这个功能,只是这个功能有点欠缺。不能像-uroot-p3306那样接收指定key的值,只能像root3306这样的方式接收。简单理解一下。代码funcmain(){cmdArgs:=os.Argsiflen(cmdArgs)>0{forindex,value:=rangecmdArgs{fmt.Printf("index:%v,value:%v\n",index,value)}}}我们通过命令gobuild-omysql.exemain.go将其编译成mysql.exe。mysql.exe图执行结果注:返回的cmdArgs是一个slice,第一个value是你自己的文件名。如果不想要自己的第一个值,直接切片即可。修改第2行代码。cmdArgs:=os.Args[1:]Executionresultflag也可能是上面发现的问题,只能接收simplevalues,不能接收keyvalue。flag可以做到,flag只能接受以下类型。boolint系列(int,int64,uint,uint64)float系列(float,float64)stringduration注意使用flag包,最后使用flag.Parse()转换得到命令行参数。flag.Type()话不多说,直接代码funcmain(){//第一个参数是命令行键,第二个参数是默认值,第三个参数是.exe-hpromptvaruser=flag.String("user","root","username")varport=flag.Int("port",3306,"port")varip=flag.String("ip","localhost","mysqlip")//你必须使用flag.Parse()解析命令行参数。flag.Parse()//flag.Type返回一个指针,必须使用*变量值fmt.Println(*user,*port,*ip)}执行结果.exe-h结果图看懂了,有你今天丢了学业!Flag.TypeVar()你可能发现了上面的问题,需要用*变量来取值,是不是觉得不方便,那就来看看flag.TypeVar()。funcmain(){//声明接收命令行参数的变量varuserstringvarportintvaripstring//从命令行扫描参数赋值给变量flag.StringVar(&user,"user","root","username")flag.IntVar(&port,"port",3306,"port")flag.StringVar(&ip,"ip","localhost","mysqlip")//必须使用flag.Parse()来解析命令行参数flag.Parse()//flag.Type返回一个指针,必须由*variablefmt.Println(user,port,ip)赋值}执行结果flag其他方法flag还有一些其他无关的方法,了解即可。funcmain(){//声明接收命令行参数的变量varuserstringvarportintvaripstring//从命令行扫描参数赋值给变量flag.StringVar(&user,"user","root","username")flag.IntVar(&port,"port",3306,"port")flag.StringVar(&ip,"ip","localhost","mysqlip")//必须使用flag.Parse()来解析命令行参数flag.Parse()//flag.Type返回一个指针,必须通过*变量取值fmt.Println(user,port,ip)/////////////////其他方法//返回后命令行参数Otherparametersfmt.Println(flag.Args())//返回命令行参数后其他参数的个数fmt.Println(flag.NArg())//返回使用的命令行参数个数fmt.Println(flag.NFlag())}执行结果总结本章主要学习flag包的使用,主要处理命令行参数传递问题。有了这个我们就可以开发mysql之类的程序了。flag主要有两个区别:flag.Type和flag.TypeVar。flag.Type中的变量是指针类型,需要使用*变量名来获取值。flag.TypeVar中的变量直接是标准变量(推荐)想进一步了解Python知识,可以参考学习网站:http://pdcfighting.com/,点击阅读原文,可以去直接~
