我想知道是否可以区分空值和未指定的字段值.
这是一个例子:
var jsonBlob = []byte(`[
{"Name": "A", "Description": "Monotremata"},
{"Name": "B"},
{"Name": "C", "Description": ""}
]`)
type Category struct {
Name string
Description string
}
var categories []Category
err := json.Unmarshal(jsonBlob, &categories)
if err != nil {
fmt.Println("error:", err)
}
fmt.Printf("%+v", categories)
Run Code Online (Sandbox Code Playgroud)
也可以在这里找到:https://play.golang.org/p/NKObQB5j4O
输出:
[{Name:A Description:Monotremata} {Name:B Description:} {Name:C Description:}]
Run Code Online (Sandbox Code Playgroud)
那么在这个例子中是否可以将类别B的描述与类别C区分开来?
我只是希望能够区分它们在程序中有不同的行为.
上下文:我正在做单元测试,并试图检查是否出现预期的错误。
我没有得到预期的结果,所以我尝试了一些与精确错误进行比较的简单操作,但惊讶的是,比较结果返回“ false”
e1 := errors.New("error")
e2 := errors.New("error")
fmt.Println(e1 == e2) // false
Run Code Online (Sandbox Code Playgroud)
运行示例:https://play.golang.org/p/cvjjiJT_5T
有人可以解释一下为什么它返回false以及如何正确检查错误之间的相等性吗?
如何使用 Unmarshal 读取包含两个不同对象的 JSON 文件?
这是JSON文件对应的结构。
{
"mysql": {
"address": "127.0.0.1",
"port": "3306",
"user": "user",
"password": "password",
"database": "database"
},
"postgres": {
"address": "127.0.0.2",
"port": "3306",
"user": "user2",
"password": "password2",
"database": "database2"
}
}
Run Code Online (Sandbox Code Playgroud)
{
"mysql": {
"address": "127.0.0.1",
"port": "3306",
"user": "user",
"password": "password",
"database": "database"
},
"postgres": {
"address": "127.0.0.2",
"port": "3306",
"user": "user2",
"password": "password2",
"database": "database2"
}
}
Run Code Online (Sandbox Code Playgroud)