>  기사  >  백엔드 개발  >  Go에서 "Unmarshal" 중에 오류 필드를 건너뛰는 방법은 무엇입니까?

Go에서 "Unmarshal" 중에 오류 필드를 건너뛰는 방법은 무엇입니까?

WBOY
WBOY앞으로
2024-02-09 09:00:20340검색

如何在 go 中的“Unmarshal”期间跳过错误字段?

Go 언어를 사용하여 JSON 역직렬화(Unmarshal)를 수행하는 동안 때때로 처리할 수 없는 오류 필드가 발생할 수 있습니다. 이러한 오류 필드로 인해 프로그램이 종료되어 코드의 정상적인 실행에 영향을 줄 수 있습니다. 그렇다면 Unmarshal 프로세스 중에 이러한 오류 필드를 건너뛸 수 있는 방법이 있습니까? 대답은 '예'입니다. 이 기사에서는 Go 언어의 일부 기술을 사용하여 Unmarshal 중에 발생하는 오류 필드를 건너뛰는 방법을 소개합니다.

질문 내용

바이트 배열을 구조체로 변환하기 위해 json.Unmarshal(body, outputStruct)를 사용하고 있습니다. 언마샬링 중에 오류가 발생할 수 있습니다.

예를 들어 구조는 다음과 같습니다.

으아악

정수 대신 부동 소수점 값으로 quantity를 전달하면 오류가 발생합니다. 유효한 필드만 역마샬링하고 오류가 있는 필드를 건너뛰는 방법을 알고 싶습니다.

따라서 json을 비정렬화하면:

으아악

구조에서 price값을 가져오고 싶지만 수량은 초기 기본값으로 둡니다.

해결책

할 수 없습니다.

JSON에 부동 소수점이 포함된 경우 이를 정수로 역마샬링할 수 없습니다. 당신은:

  1. float64를 사용하고 비정렬화 후 코드에서 정수가 아닌 값을 처리하세요
  2. 유형에 맞는 UnmarshalJSON을 직접 작성하세요
  3. 실패하지 않고 Quantity(새 구조)의 두 번째 역마샬링만 수행하고 오류를 무시하도록 ("-") Quantity를 무시하고 2단계 역정렬화를 수행합니다.

2가 "가장 좋은" 방법이지만 "잘못된 유형의 필드 건너뛰기" 뒤에 숨은 논리가 무엇인지 잘 모르겠습니다. 수량이 2.5라면 수량의 가치는 어떻게 될까요? 0? 왜?

위 내용은 Go에서 "Unmarshal" 중에 오류 필드를 건너뛰는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제