GO學習筆記 命令列解析

2021-09-27 05:30:57 字數 2866 閱讀 8450

os.args用於獲取通過命令列傳入的引數

os.args[0]:程式執行路徑

os.args[1]:第1個引數

os.args[2]:第2個引數

len(os.args):引數數量

示例如下

package main

import (

"fmt"

"os"

)func main()

}

測試效果

# 編譯執行

go build arg.go

./arg foo "hello world" bar

# 輸出

program: ./arg

arg[0]: foo

arg[1]: hello world

arg[2]: bar

golang內建的flag模組可以實現命令列flag解析。

什麼是flag,舉例說明(加粗部分就是flag):

▷ wc-l

▷ ./configure--prefix=/usr/local/nginx

示例如下(摘取自gobyexample)

package main

import (

"flag"

"fmt"

)func main()

測試效果

# 編譯

go build flag.go

./flag -word=opt -numb=7 -fork -svar=flag

# 輸出

word: opt

numb: 7

fork: true

svar: flag

tail:

./flag -word=opt

# 輸出

word: opt

numb: 42

fork: false

svar: bar

tail:

./flag -word=opt a1 a2 a3

# 輸出

word: opt

numb: 42

fork: false

svar: bar

tail: [a1 a2 a3]

./flag -word=opt a1 a2 a3 -numb=7

# 輸出

word: opt

numb: 42

fork: false

svar: bar

tail: [a1 a2 a3 -numb=7]

./flag -h

# 輸出

usage of ./flag:

-fork

a bool

-numb int

an int (default 42)

-svar string

a string var (default "bar")

-word string

a string (default "foo")

./flag -wat

# 輸出

flag provided but not defined: -wat

usage of ./flag:

...

該例子,在測試時候只使用了「單橫線+引數名」,實際有4種方式,效果是相同的

-word opt

-word=opt

--word opt

--word=opt

如果想實現子命令效果,例如:

▷ docker ps --last 10

▷ docker images --help

這需要將os.args和flag結合使用。基本原理:建立多個flag集合(即*flag.flagset),每個flag集合對應不同的os.args

示例如下(摘取自gobyexample)

package main

import (

"flag"

"fmt"

"os"

)func main()

switch os.args[1]

}

測試效果

# 編譯

go build subflag.go

./subflag foo -enable -name=joe a1 a2

# 輸出

subcommand 'foo'

enable: true

name: joe

tail: [a1 a2]

./subflag bar -level 8 a1

# 輸出

subcommand 'bar'

level: 8

tail: [a1]

./subflag bar -enable a1

# 輸出

flag provided but not defined: -enable

usage of bar:

-level int

level

# os.args

# flag

# 子命令

GO學習筆記 命令列解析

os.args用於獲取通過命令列傳入的引數 os.args 0 程式執行路徑 os.args 1 第1個引數 os.args 2 第2個引數 len os.args 引數數量 示例如下 package main import fmt os func main 測試效果 編譯執行 go build a...

Go解析命令列傳入引數

go的flag包用來解析命令列引數。引數的表示方法為 flag flag x flag x x不能是bool值 主要的api如下 獲取名字為name的引數值,預設值為value,用法為usage 注意返回值是乙個指標 類似的方法還有 int bool 等。func string name strin...

caffe學習筆記10 命令列解析

caffe的c 主程式 caffe.cpp 放在根目錄下的tools資料夾內,當然還有一些其它的功能檔案,如 convert imageset.cpp,train net.cpp,test net.cpp等也放在這個資料夾內。經過編譯後,這些檔案都被編譯成了可執行檔案,放在了 build tools...