首页  >  文章  >  后端开发  >  `json.Marshal` 何时返回非紧急错误?

`json.Marshal` 何时返回非紧急错误?

Barbara Streisand
Barbara Streisand原创
2024-11-01 06:34:31184浏览

When Does `json.Marshal` Return a Non-Panic Error?

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 函数可以生成两种类型的错误:

  • UnsupportedTypeError: 当传递无效类型时发生,例如通道或函数。
  • UnsupportedValueError: 提供无效值时引发,例如无穷大。

在给定的示例中,错误属于 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn