go语言之命令行参数解析

#第一种:
func main() {   	
	 if len(os.Args)<0{
    		 return   
         }    
     	 fmt.Printf("====%s====\n", os.Args[1])   
      	 fmt.Printf("====%s====\n", os.Args[2])   
       	 fmt.Printf("====%s====\n", os.Args[3])    
       	 fmt.Printf("%s\n", os.Args)
}

在这里插入图片描述

#第二种
    
    func main() {
    	var age, name string   
     	fmt.Scan(&name, &age)
    	fmt.Printf("my name is %s,i am %s years old .\n", name, age)    
    	fmt.Printf("%s\n", os.Args)   
     	//这种方式需要输入一个参数一个回车,一个参数一个回车想当麻烦!
     }

在这里插入图片描述

 func main() { 
	var age, name string  
  	//严格按照输出格式进行输入   
   	fmt.Scanf("%s,%s", &name, &age)   
    	fmt.Printf("my name is %s,i am %s years old .\n", name, age)    
    	fmt.Printf("%s\n", os.Args)   
     //这种方式需要 单独输入参数.
 }

在这里插入图片描述

#第三种
func main() {
     scanner := bufio.NewScanner(os.Stdin)    
     scanner.Scan()   
     
     if err := scanner.Err(); err != nil {
             fmt.Fprintln(os.Stderr, "error:", err)
     }
     
     line := scanner.Text()   
     fmt.Printf("bufio.NewScanner:%q\r\n", scanner.Text())
     data := strings.Split(line, " ")    
     fmt.Println(data)
 }

在这里插入图片描述

#第四种  正常的开发中上面的三种都不常用,flag包的机制是最哦常用的
type option struct {    
	EtcdendPoints []string    
	Version       bool    
	Fore          bool
}

func (p *option) Output() {    
	fmt.Println("Args parse result: etcdendpoint:", p.EtcdendPoints, ", is fore:", p.Fore, ", show version:", p.Version)
}

func dealWithOsArgs() *option {
    var etcdendPoints string
    //参数解析:变量 关键字 初始值 模板说明    
    flag.StringVar(&etcdendPoints, "e", "127.0.0.1:2379", " -e [ip]:[port]")    
    version := flag.Bool("v", false, "Displays current version confidence")    
    fore := flag.Bool("f", false, "default daemon false")        
    
    //program useage 的输出特性    
    flag.Usage = func() {
            fmt.Printf("Usage of %s:\n", os.Args[0]) 
            fmt.Printf("    example7 file1 file2 ...\n")        
            flag.PrintDefaults()   
    }
           
    flag.Parse()       
    //输出没有标识的字段   
    fmt.Printf("other args: %+v\n", flag.Args())
            
    if *version {
            fmt.Println("")        
            fmt.Println("")        
            OutputVersionInfo()        
            fmt.Println("exit")        
            os.Exit(0)    
   }
          
    etcd := fmt.Sprintf("%v", etcdendPoints)    
    endPoints := make([]string, 0)    
    endPoints = append(endPoints, etcd)
    
    return &option{
            Version:       *version,
            Fore:          *fore,
            EtcdendPoints: endPoints,
            }
  }
  
func main(){ 

   	opt := dealWithOsArgs()
        opt.Output()
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值