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이 반환할 수 있음을 보여줍니다. 패닉을 일으키지 않고 non-nil 오류가 발생합니다. 이를 통해 개발자는 애플리케이션에서 이러한 오류를 적절하게 처리할 수 있습니다.
위 내용은 Go에서 JSON 마샬 오류를 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!