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...