2016-11-18 32 views
0

我已經寫了下面的代碼片段在trial.go如何正確解開命令行輸入?

type Mine struct{ 
    A string `json:"a"` 
} 

func main(){ 
    s := Mine{} 
    v := os.Args[1]//`{"a":"1"}` 
    fmt.Println(v) 
    fmt.Println(reflect.TypeOf(v)) 
    json.Unmarshal([]byte(v), &s) 
    fmt.Println(s) 
} 

我運行如下文件:

go run trial.go `{"A":"1"}` 

但我不s得到任何東西。它始終是一個空白的結構。

我在這裏做錯了什麼?

+1

你試過從Unmarshal檢查錯誤嗎? – JimB

+0

不同的錯誤實際上就像「無效字符」A'尋找對象鍵字符串的開始「,但我想@icza給出的答案爲我工作。雖然我現在感覺命令行輸入對我來說不是好的選擇,當我嘗試將上面的代碼片段用於較大的代碼段時,我期望更大的輸入字符串。我需要找到一個更好的方式來接受投入。 –

+0

我認爲你應該只傳遞{「A」:「1」}而沒有後退滴答聲「 –

回答

1

首先檢查json.Unmarshal()返回的錯誤。

下一頁您json標籤使用小"a"作爲JSON的關鍵,然而encoding/json包將認識到資本"A"了。

最後在命令行中傳遞這些參數可能是OS(shell)特定的。倒引號和報價通常有特殊的意義,試圖通過這樣的:

go run trial.go {\"a\":\"1\"} 

您也應該檢查的os.Args長度索引之前,如果用戶沒有提供任何參數,os.Args[1]就會死機。

正如您所提到的,您應該找到另一種測試輸入JSON文檔的方法,如果JSON文本較大,這將變得不可行,並且這也是OS(shell)特定的。更好的方法是從標準輸入讀取或從文件讀取。