go語言獲取命令行參數

go語言獲取命令行參數

os.Args

這是符合簡單使用的方式。html

package main

import (
	"fmt"
	"os"
)

func main()  {
	fmt.Println(os.Args)

}

編譯後並在命令行中輸入:./args_test par1 par2 par3,會以空格分割。
輸出:[./args_test par1 par2 par3]git

// os.Args是一個[]string
os.Args[0]	// 是可執行文件自己
// 其餘的元素以os.Args[n]取值

跟明顯,上面這種方式是不能指定參數的,因此這裏引入另外一種方式:github

flag

代碼中使用

flag包支持的命令行參數類型有bool、int、int6四、uint、uint6四、 float6四、string、duration。golang

flag 命令行中輸入值
String 合法字符串
Int、Int6四、 Uint、Uint64 123四、066四、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用兩種使用方式:web

  • 一、返回數據類型的指針,不用本身提早聲明 (如:flag.String())

格式:變量(指針) := flag.String("參數名字", "默認值", "提示信息,能夠--help顯示")
如:markdown

s := flag.String("name", "lczmx", "輸入名字")
fmt.Println(*s)
  • 將本身聲明的指針傳進flag中,不用接收值 (如:flag.StringVar())

格式:ui

var 變量
flag.String(&變量,"參數名字", "默認值", "提示信息,能夠--help顯示")
flag.Parse()
// 以後就能操做該變量了

如:spa

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

注:以上的String能夠換成其餘類型(Int、Bool、Float6四、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
個人博客
個人筆記

相關文章
相關標籤/搜索