在 Go 中使用 json.Marshal 函数时,考虑可能触发错误的输入数据至关重要。正如官方文档中提到的,不支持循环数据结构,尝试封送它们会导致无限递归,最终导致运行时恐慌。
为了演示非恐慌错误条件,让我们创建一个程序展示了 json.Marshal 可以返回的两种类型的错误:UnsupportedTypeError 和 UnsupportedValueError。
<code class="go">package main import ( "encoding/json" "fmt" "math" ) func main() { // UnsupportedTypeError: marshalling an invalid type (channel) ch := make(chan int) _, err := json.Marshal(ch) if e, ok := err.(*json.UnsupportedTypeError); ok { // Check for specific error type fmt.Println("UnsupportedTypeError:", e.Type) } else { fmt.Println("Error:", err) } // UnsupportedValueError: marshalling an invalid value (infinity) inf := math.Inf(1) _, err = json.Marshal(inf) if e, ok := err.(*json.UnsupportedValueError); ok { // Check for specific error type fmt.Println("UnsupportedValueError:", e.Value) } else { fmt.Println("Error:", err) } }</code>
输出:
UnsupportedTypeError: chan int UnsupportedValueError: +Inf
通过提供特定输入,该程序演示了 json.Marshal 可以返回非零错误而不引起恐慌。这使得开发人员能够在他们的应用程序中优雅地处理这些错误。
以上是如何处理 Go 中的 JSON Marshal 错误?的详细内容。更多信息请关注PHP中文网其他相关文章!