Golang JSON Marshalling 中的错误处理
JSON 数据结构不能表示循环引用,Go 的 json.Marshal 函数无法处理它们。因此,将循环结构传递给 Marshal 会导致无限递归和运行时恐慌。
除了循环结构之外,json.Marshal 在遇到不支持的类型或无效值的情况下还可以返回非 nil 错误。
不支持的类型
Marshal 在尝试时返回 UnsupportedTypeError封送不支持的数据类型。例如:
import "encoding/json"
func main() {
ch := make(chan int)
_, err := json.Marshal(ch)
if _, ok := err.(*json.UnsupportedTypeError); ok {
// Error: Unmarshal: unsupported type: chan int
}
}
不支持的值
当尝试封送无效值时,Marshal 也可能返回 UnsupportedValueError。例如:
import (
"encoding/json"
"math"
)
func main() {
positiveInfinity := math.Inf(1)
_, err := json.Marshal(positiveInfinity)
if _, ok := err.(*json.UnsupportedValueError); ok {
// Error: json: unsupported value: Inf
}
}
通过了解这些条件,开发人员可以优雅地处理错误并确保 json.Marshal 返回预期结果或处理适当的错误。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3