2 回答

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超10個(gè)贊
您想要的不是 stdlib 標(biāo)志包如何解析標(biāo)志:https ://golang.org/pkg/flag/#hdr-Command_line_flag_syntax 。一個(gè)標(biāo)志可以有一個(gè)參數(shù)。
您能做的最好的事情是-loc .env -names "val1 val2" -tags "arg1 arg2"
或-loc .env -names val1,val2 -tags arg1,arg2
。在第一種情況下,雙引號(hào)將多個(gè)單詞轉(zhuǎn)換為單個(gè)命令行參數(shù),而在第二種情況下,使用逗號(hào)而不是空格來組合參數(shù)。在這兩種情況下,您都必須將結(jié)果解析為單獨(dú)的參數(shù),也許使用strings.Split
.
請注意,您使用strings.Fields
將測試參數(shù)分解為空格分隔的字段,但這會(huì)忽略引號(hào),這與命令行的行為不同。

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個(gè)贊
由于 shell 使用 space(" ") 作為分隔符,所以使用空格作為分隔符并不是一個(gè)好主意。使用逗號(hào)“,”作為分隔符可以優(yōu)雅地解決這個(gè)問題。
https://play.golang.org/p/xF2N_qnRlwe
package main
import (
"flag"
"fmt"
"strings"
)
func main() {
//NOT GOOD - multiple values (see value1 value2)
args := strings.Fields(`-loc .env -names val1,val2 -tags arg1,arg2`)
FlagSet := flag.NewFlagSet("FlagSet", flag.ContinueOnError)
loc := FlagSet.String("loc", "", "")
names := FlagSet.String("names", "", "")
tags := FlagSet.String("tags", "", "")
FlagSet.Parse(args)
fmt.Printf("location: %s \n", *loc)
fmt.Printf("names: %s \n", strings.Split(*names, ","))
fmt.Printf("tags: %s \n", strings.Split(*tags, ","))
}
- 2 回答
- 0 關(guān)注
- 147 瀏覽
添加回答
舉報(bào)