> 백엔드 개발 > Golang > Go에서 파생 스칼라 유형에 대한 사용자 정의 JSON 역마샬링을 어떻게 구현할 수 있나요?

Go에서 파생 스칼라 유형에 대한 사용자 정의 JSON 역마샬링을 어떻게 구현할 수 있나요?

Patricia Arquette
풀어 주다: 2024-11-25 05:46:18
원래의
366명이 탐색했습니다.

How Can I Implement Custom JSON Unmarshaling for Derived Scalar Types in Go?

Go에서 JSON Unmarshaling을 위한 사용자 정의 유형 파생

Go에서 사용자 정의 유형으로 작업할 때 이를 활성화하려면 UnmarshalJSON 기능을 구현해야 하는 경우가 많습니다. JSON에서 원하는 유형으로 자동 변환됩니다. 그러나 유형이 스칼라 값에서 파생되면 문제가 발생합니다. 이 기사에서는 이 문제를 극복하기 위한 솔루션을 살펴봅니다.

개인을 식별하기 위해 하위 유형의 정수 상수를 나타내는 PersonID 유형의 예를 생각해 보세요. 우리는 JSON 문자열의 자동 변환을 지원하기 위해 이 유형의 기능을 확장하려고 합니다. UnmarshalJSON은 스칼라 값을 직접 반환하거나 수정하기 때문에 이 유형에 대해 UnmarshalJSON을 구현하는 것이 어려워지는 반면, UnmarshalJSON은 수정을 위해 구조체를 기대합니다.

이 문제를 해결하기 위해 포인터 수신기 접근 방식을 채택합니다. 포인터 수신기를 사용하면 UnmarshalJSON 메서드 내에서 변경된 내용이 원래 값에 반영됩니다. 다음은 수정된 UnmarshalJSON 구현의 예입니다.

func (intValue *PersonID) UnmarshalJSON(data []byte) error {
  var s string
  if err := json.Unmarshal(data, &s); err != nil {
    return err
  }
  *intValue = Lookup(s)
  return nil
}
로그인 후 복사

이 구현에서 JSON 텍스트는 문자열을 원하는 PersonID 값으로 변환하는 Lookup 함수에 전달되기 전에 문자열 변수로 마샬링 해제됩니다. 그런 다음 이 값은 intValue 포인터에 할당됩니다.

또한 JSON 태그와 JSON 데이터 간의 충돌을 방지하려면 MyType 구조체의 태그가 JSON의 필드 이름과 일치하는지 확인하세요. 다음 단계를 따르면 파생 스칼라 유형에 대한 UnmarshalJSON을 성공적으로 구현할 수 있습니다.

위 내용은 Go에서 파생 스칼라 유형에 대한 사용자 정의 JSON 역마샬링을 어떻게 구현할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿