glang flag


package main

import (
	"flag"
	"fmt"

	"github.com/golang/glog"
)

/*

解析 flag
必须先定义flag 命令行有 -port=xx 如果没有 var port =xx声明则会报错flag provided but not defined: -port

在所有的 flag 定义完成之后,可以通过调用 flag.Parse() 进行解析。

命令行 flag 的语法有如下三种形式:

-flag // 只支持bool类型 此时为true
-flag=x
-flag x // 只支持非bool类型
以上语法对于一个或两个‘-’号,效果是一样的,但是要注意对于第三种情况,只能用于非 bool 类型的 flag。
原因是:如果支持,那么对于这样的命令 cmd -x *,如果有一个文件名字是:0或false等,则命令的原意会改
变(bool 类型可以和其他类型一样处理,其次 bool 类型支持 -flag 这种形式,因为Parse()中,对 bool
 类型进行了特殊处理)。默认的,提供了 -flag,则对应的值为 true,否则为 flag.Bool/BoolVar 中指定
的默认值;如果希望显示设置为 false 则使用 -flag=false。

int 类型可以是十进制、十六进制、八进制甚至是负数;bool 类型可以是1, 0, t, f, true, false, TRUE, FALSE, True,
 False。Duration 可以接受任何 time.ParseDuration 能解析的类型。

注:如果bool类型的参数在命令行中用了-flag false这种形式时,其后的参数都会被当做非flag(non-flag)参数,non-flag 参数后面解释。
*/
func flagTest(){
	//go run main.go  -port=false --data sssqqq no_flag
	fmt.Println(flag.Args()) // 获取非flag参数 [no_flag]
}

var  local  = flag.Bool("port", false, "testing!!")
var  str  = flag.String("data", "des", "testing!!")
func main() {
	flag.Parse()
	flagTest()
	fmt.Println("test", *local)
	fmt.Println("test", *str)
	defer glog.Flush()


}



posted @ 2019-10-17 14:08  nanaindi  阅读(177)  评论(0编辑  收藏  举报