Golang獲取命令列引數的方式

2021-10-10 22:34:11 字數 2081 閱讀 6344

當我們希望通過命令列啟動golang程式,獲取輸入的各種形式引數時,該如何處理呢?

os.args是乙個string的切片,用來儲存所有的命令列引數,包括go run main.go這部分,整體編譯後實際是生成和執行的main.exe檔案,所以第乙個引數是main.exe。示例如下:

func

main()

}

命令列攜帶引數啟動:go run main.go -name korbin aaa bbb ccc,執行結果如下:

1 -name

2 korbin

3 aaa

4 bbb

5 ccc

golang內建的flag包提供了一系列解析命令列引數的功能介面,使用flag主要包括以下幾步:

第一步首先定義命令列引數,有如下三種方式:

1.通過flag.string(),bool(),int()flag.***()方法,該種方式返回乙個相應的指標:

ip := flag.

int(

"name"

,"korbin"

,"the author's name"

)

方法中有三個引數:

name:表示指定的引數名,在命令列中輸入為-name或–name

value:表示預設值

usage:引數說明描述

2.通過flag.***var()方法將引數值繫結到乙個變數,該種方式無返回值,如:

var name string

flag.

strin**ar

(&name ,

"name"

,"korbin"

,"the author's name"

)

方法的第乙個引數為繫結的變數,傳指標;後續引數和上述相同。

3.通過flag.var()繫結自定義型別,自定義型別需要實現value介面(receives必須為指標),如:

flag.

var(

&name,

"name"

,"the author's name"

)

對於這種型別的flag,預設值為該變數型別的初始值,即輸入的是int型別則預設為0,string預設為空等。

第二步,呼叫flag.parse()將命令列引數解析到定義的flag:

flag.

parse

()

解析函式將會在碰到第乙個非flag命令列引數時停止,非flag命令列引數是指不滿足命令列語法的引數,如命令列引數為cmd --flag=true abc則第乙個非 flag 命令列引數為「abc」

通過上述定義引數和解析引數兩步,就已經是可以拿到我們的引數了。並且對於非命令列引數,還可通過flag.args(),flag.arg(i)來獲取 ~

完整的示例如下:

package main

import

("flag"

"fmt"

"os"

)func

main()

命令列攜帶引數啟動:go run main.go -name korbin aaa bbb ccc,執行結果如下:

命令列引數name的值: korbin

非命令列引數切片:[aaa bbb ccc]

golang獲取命令列引數

package main import fmt os func main os可以通過變數args來獲取命令引數,os.args返回乙個字串陣列。其中第乙個引數就是執行檔案的名字。package main import flag fmt func main 執行go run test.go,會得到 ...

golang 獲取命令列引數

golang 程式獲取命令列引數,然後根據傳遞的引數做不同的邏輯處理 os.args 變數是個string切片,我們可以通過api 手冊得知,os包裡面定義了這個變數。var args stringargs保管了命令列引數,第乙個是程式名,下面通過例項來演示下如何解析命令列引數 package ma...

golang獲取命令列引數方法總結

package main import fmt os func main 生成並執行 go build o main.exe main.go main.exe 小李 18歲 程式設計師結果 命令列引數數量 4 第二個引數 小李 args 0 main.exe args 1 小李 args 2 18歲...