zoukankan      html  css  js  c++  java
  • go语言获取命令行参数

    go语言获取命令行参数

    os.Args

    这是符合简单使用的方式。

    package main
    
    import (
    	"fmt"
    	"os"
    )
    
    func main()  {
    	fmt.Println(os.Args)
    
    }

    编译后并在命令行中输入:./args_test par1 par2 par3,会以空格分割。
    输出:[./args_test par1 par2 par3]

    // os.Args是一个[]string
    os.Args[0]	// 是可执行文件本身
    // 其他的元素以os.Args[n]取值

    跟明显,上面这种方式是不能指定参数的,所以这里引入另一种方式:

    flag

    代码中使用

    flag包支持的命令行参数类型有bool、int、int64、uint、uint64、 float64、string、duration。

    flag 命令行中输入值
    String 合法字符串
    Int、Int64、 Uint、Uint64 1234、0664、0x1234等类型,也可以是负数。
    Float64 合法浮点数
    Bool 1, 0, t, f, T, F, true, false, TRUE, FALSE, True, False。
    Duration 任何合法的时间段字符串。单位有”ns”、”us” /“µs”、”ms”、”s”、”m”、”h”(如”300ms”、”-1.5h”、”2h45m”)

    flag用两种使用方式:

    • 1、返回数据类型的指针,不用自己提前声明 (如:flag.String())

    格式:变量(指针) := flag.String("参数名字", "默认值", "提示信息,可以--help显示")
    如:

    s := flag.String("name", "lczmx", "输入名字")
    fmt.Println(*s)
    • 将自己声明的指针传进flag中,不用接收值 (如:flag.StringVar())

    格式:

    var 变量
    flag.String(&变量,"参数名字", "默认值", "提示信息,可以--help显示")
    flag.Parse()
    // 之后就能操作该变量了

    如:

    var s string
    flag.String(&s, "name", "lczmx", "输入名字")
    flag.Parse()
    fmt.Println(s)
    

    注:以上的String可以换成其他类型(Int、Bool、Float64、Duration等)

    通过以上两种方法定义好命令行flag参数后,还需要通过调用flag.Parse()来对命令行参数进行解析。

    完整例子:

    package main
    
    import (
    	"flag"
    	"fmt"
    	"time"
    )
    
    func main() {
    	// 第一种方式
    	isOk := flag.Bool("isOk", false, "你ok吗?")
    	t := flag.Duration("time", time.Second, "时间")
    	// 第二种方式
    	var age int
    	flag.IntVar(&age, "age", 18, "年龄")
    
    	flag.Parse()
    	fmt.Println("isOk", *isOk)
    	fmt.Println("time", *t)
    	fmt.Println("age", age)
    }
    

    命令行中输入

    命令行参数格式有以下几种,可以混用:

    ./main -age xxx
    ./main --age xxx
    ./main -age=xxx
    ./main --age=xxx

    使用help:(-h、--h、--help、-help),输出:

    Usage of /tmp/go-build771233563/b001/exe/main:
      -age int
            年龄 (default 18)
      -isOk
            你ok吗?
      -time duration
            时间 (default 1s)
    exit status 2

    其他

    flag.Args()  ////返回命令行参数后的其他参数,以[]string类型
    flag.NArg()  //返回命令行参数后的其他参数个数
    flag.NFlag() //返回使用的命令行参数个数

    我的github
    我的博客
    我的笔记

  • 相关阅读:
    mssql 循环的写法,备用
    用了十几年的windows记录下我不知道的几个快捷键
    折腾了下java下webservice,折腾了大半天,居然是eclipse的版本不对
    连接Linux 下mysql 慢的问题,解决之
    解决windows7蓝屏的方法
    MySQL錯誤:Value '00000000' can not be represented as java.sql.Date解決方法[转]
    jdbc连接三种数据库的连接语句写法(备查)
    遇到一个json解析的错误,费了好大的劲,最后发现是少了一个包
    【转】The reference to entity "characterEncoding" must end with the ';' delimiter
    synaptics 插入USB鼠标禁用,网上
  • 原文地址:https://www.cnblogs.com/lczmx/p/12915717.html
Copyright © 2011-2022 走看看