json - unmarshal - 마침내 골란의 소리가 들릴 겁니다 마샬이 오류를 되 돌리겠습니까?
marshal unmarshal json (2)
Jonathan의 답변을 보완하기 위해 json.Marshal 함수는 UnsupportedTypeError
또는 UnsupportedValueError
의 두 가지 유형의 오류를 반환 할 수 있습니다.
Jonathan이 잘못된 유형을 마샬링하려고 시도하면서 말한 것처럼 첫 번째 문제가 발생할 수 있습니다.
_, err := json.Marshal(make(chan int))
_, ok := err.(*json.UnsupportedTypeError) // ok == true
반면에 마샬 함수가 잘못된 값을 전달하여 오류를 반환하도록 할 수도 있습니다.
_, err := json.Marshal(math.Inf(1))
_, ok := err.(*json.UnsupportedValueError) // ok == true
docs :
JSON은 순환 데이터 구조를 나타낼 수 없으며 마샬은이를 처리하지 않습니다. 주기 구조를 Marshal에 전달하면 무한 재귀가 발생합니다.
나는이 상황을 경험했다. 결과는 런타임 패닉을 초래한다.
내가 궁금해하는 점은 누군가 json.Marshal이 non-nil 오류를 반환하는 비 공황 상태를 나타내는 작업 프로그램을 제공 할 수 있는지 여부입니다. 가장 좋은 답변 에는 사용 된 입력 이 분명히 포함됩니다 .
업데이트 : 이제 map [int] int 대신 채널을 사용하여 오류를 유도합니다.
특정 func
구조 (예 : func
또는 chan
가 직렬화를 거부합니다.
package main
import (
"encoding/json"
"fmt"
)
func main() {
value := make(chan int)
_, err := json.Marshal(value)
fmt.Println(err)
}