如何正确解组命令行输入?

时间:2016-11-18 03:31:09

标签: json go command-line-arguments

我在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 个答案:

答案 0 :(得分: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)的。更好的方法是从标准输入读取或从文件中读取。