golang.flag-package

package main

import (
	"flag"
	"fmt"
)

//**Demo1**:
func main() {
	t1 := flag.Int("w", 0, "demo test")          //int变量
	t2 := flag.String("a", "Hello", "demo test") //string变量
	flag.Parse()                                 //Parse()代表我们开始解析参数,在Parse以后,我们是不允许再添加参数的
	fmt.Println("t1 is ", *t1)                   //*t1使用指针,表示标签解析的结果
	fmt.Println("t2 is ", *t2)
	fmt.Printf("There is %d non-flag\n", flag.NArg()) //NArg()用来输出non-flag参数的个数
	for i, arg := range flag.Args() {                 //循环获取参数
		fmt.Printf("%d is %s\n", i+1, arg)
	}
}

//**Demo2**:
func main() {
	// 定义几个变量,用于接收命令行的参数值
	var user string
	var pwd string
	var host string
	var port int
	// &user 就是接收用户命令行中输入的 -u 后面的参数值
	// "u" 就是 -u 指定的参数
	// "" 默认值
	// "用户名,默认为空" 说明
	flag.StringVar(&user, "u", "", "用户名,默认为空")
	flag.StringVar(&pwd, "pwd", "", "密码,默认为空")
	flag.StringVar(&host, "h", "localhost", "主机名,默认为 localhost")
	flag.IntVar(&port, "port", 3306, "duan端口号,默认3306")
	//【必须调用】从arguments中解析注册的flag
	flag.Parse()
	// 输出结果
	fmt.Printf("\n user=%v \n pwd=%v \n host=%v \n port=%v \n", user, pwd, host, port)
}

//**Demo3**:
func main() {
	backupdir := flag.String("b", "/home/default_dir", "backup path")
	debugmode := flag.Bool("d", false, "debug mode")
	flag.Parse()
	fmt.Println("backupdir: ", *backupdir)
	fmt.Println("debugmode: ", *debugmode)
}

/**
  启动命令:go run main.go -b /home/backup
  输出结果:
      backup_dir:  /home/backup  // 因为指定了路径,所以覆盖了默认路径
      debug_mode:  false         // 启动命令里不带 -d 参数,所以启用默认值
*/
posted @ 2020-07-10 14:22  kylingx  阅读(154)  评论(0编辑  收藏  举报