【发布时间】:2017-10-30 06:16:58
【问题描述】:
我已阅读this question,它询问 json.Marshal 是否会因任何输入而失败,并且根据我的情况看起来它不会失败的答案。我的情况如下:
我有一个特定的结构(没有嵌套,没有数组,只有字符串,各种类型的整数,布尔值)。我需要将其编组为 json。它会失败吗?
在更多specific example:
type some struct {
F1 string `json:"f1"`
F2 uint32 `json:"f2"`
F3 int64 `json:"f3"`
F4 bool `json:"f4"`
}
func doSomething(s some) (string, error) {
data, err := json.Marshal(s)
if err != nil {
return "", err
}
return string(data), nil
}
doSomething 会失败吗?如果是,请提供输入,否则解释原因。根据我目前的知识,它不能。
【问题讨论】:
-
如果一个函数(例如
json.Marshal)返回一个错误值,永远不要假设它不会失败,除非文档明确说明。它返回一个错误是有原因的。 -
@Adrian 你错过了这个问题的重点。关键是要弄清楚它为什么会失败。所以对我来说,如果你在文档中看到一些你看不到原因的东西,请询问其他人并学习新的东西
-
你误解了评论的意思,它在接受的答案中得到了回应:函数返回一个错误值,文档并没有说它总是为零,所以它可能会返回一个错误,并且它可能返回错误的情况可能因 Go 版本而异。如果你想知道在特定的 Go 版本下它何时可能返回错误,请阅读该版本中的函数源。
标签: go