zoukankan      html  css  js  c++  java
  • golang命令行参数解析

    golang的命令行参数解析,推荐两种。一个是os.Args,另一个是使用flag模块

    os.Args

    package main
    
    import (
    	"fmt"
    	"os"
    )
    
    func main() {
    	args := os.Args
    	//使用go run xx.go 1 2 3 xx aaa bbb ccc  ddd  eee
    	//那么args就是[xx.exe 1 2 3 xx aaa bbb ccc ddd eee]
    	//并且全部是string类型
    	fmt.Println(args)
    }
    

    flag

    flag模块可以支持使用关键字的方式指定参数

    package main
    
    import (
    	"flag"
    	"fmt"
    )
    
    func main() {
    	//flag.Type里面接受三个参数,指定的名字,默认值,描述信息
    	Name := flag.String("name", "mashiro", "姓名")
    	Age := flag.Int("age", 16, "年龄")
    	Has_bf := flag.Bool("has_bf", false, "有男朋友?")
    
    	//解析
    	flag.Parse()
    
    	/*
    	我们在命令行中便可以通过name satori age 16 has_bf false这种方式指定
    	当然还可以使用其他方式比如 --name satori, -name satori, --name=satori,-name=satori
    	 */
    
    	//但是注意:得到的Name、Age、Has_bf都是指针
    	fmt.Println(*Name, *Age, *Has_bf)
    }
    

    flag的其他参数

    package main
    
    import (
    	"flag"
    	"fmt"
    )
    
    func main() {
    	Name := flag.String("name", "mashiro", "姓名")
    	Age := flag.Int("age", 16, "年龄")
    	Has_bf := flag.Bool("has_bf", false, "有男朋友?")
    	flag.Parse()
    
    	fmt.Println(*Name, *Age, *Has_bf)
    	//命令行后的其他参数,是一个[]string类型
    	fmt.Println(flag.Args())
    	//命令行后的其他参数个数
    	fmt.Println(flag.NArg())
    	//命令行使用的参数个数
    	fmt.Println(flag.NFlag())
    }
    

    我们后面多指定了,a b c 1,所以可以通过flag.Args来获取,flag.NArgs就是多指定的参数个数,flag.NFlag则是我们在命令行,通过指定关键字的方式指定的参数个数,这里是2,因为has_bf我们没有指定,但即便如此也是打印了默认值的

    flag模块还可以使用一种方式,flag.TypeVar,这和flag.Type是基本类似的

    package main
    
    import (
    	"flag"
    	"fmt"
    )
    
    func main() {
    	var Name string
    	var Age int 
    	var Has_bf bool 
    	flag.StringVar(&Name, "name", "mashiro", "姓名")
    	flag.IntVar(&Age, "age", 16, "年龄")
    	flag.BoolVar(&Has_bf, "has_bf", false, "有男朋友?")
    	flag.Parse()
    
    	fmt.Println(Name, Age, Has_bf)
    	fmt.Println(flag.Args())
    	fmt.Println(flag.NArg())
    	fmt.Println(flag.NFlag())
    }
    

    flag.Type是直接返回一个指针,flag.TypeVar则是需要先声明变量,然后把指针传进去,至于后面的参数、以及结果都是一样的。

  • 相关阅读:
    企业使用数据库的12种姿势
    回归架构本质,重新理解微服务
    Java中随机数的产生方式与原理
    自动类型转换、强制类型转换、作用域、整型表数范围
    创建自定义类的对象数组
    CentOS上安装比较习惯的代码编辑器
    ubuntu 15.04 的安装遇到的问题及其解决方法
    算法思想篇(1)————枚举算法
    初来乍到
    Eclipse中获取html jsp 标签的属性提示信息方法
  • 原文地址:https://www.cnblogs.com/traditional/p/11888451.html
Copyright © 2011-2022 走看看