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이 nil이 아닌 오류를 반환하게 할 수 있는 몇 가지 추가 시나리오입니다.
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!