json.Marshal 错误处理:了解输入引发的错误
文档中突出显示的 json.Marshal 函数无法处理循环数据结构,导致运行时恐慌。虽然这是一种常见情况,但也可能会遇到生成非紧急错误的情况。
输入导致错误生成
为了说明非-恐慌场景,请考虑以下示例:
<code class="go">type Node struct { Value int Next *Node } func main() { node1 := Node{1, nil} node2 := Node{2, &node1} node1.Next = &node2 _, err := json.Marshal(node1) if err != nil { fmt.Printf("Error encountered: %v\n", err) } }</code>
结果:
上述程序将在不恐慌的情况下执行,而是返回错误:json:不支持的类型:* main.Node
错误类型
json.Marshal 函数可以生成两种类型的错误:
在给定的示例中,错误属于 UnsupportedValueError 类别,因为它涉及无效值(循环数据结构)而不是无效类型。
其他示例:
以下是一些可能导致 json.Marshal 返回非零错误的其他场景:
<code class="go">_, err := json.Marshal(nil) // Error: json: unsupported value: nil _, err := json.Marshal(1e100) // Error: json: unsupported value: 1e+100, must be finite</code>
以上是`json.Marshal` 何时返回非紧急错误?的详细内容。更多信息请关注PHP中文网其他相关文章!