Go에서 JSON Unmarshaling을 위한 사용자 정의 유형 파생
Go에서 사용자 정의 유형으로 작업할 때 이를 활성화하려면 UnmarshalJSON 기능을 구현해야 하는 경우가 많습니다. JSON에서 원하는 유형으로 자동 변환됩니다. 그러나 유형이 스칼라 값에서 파생되면 문제가 발생합니다. 이 문서에서는 이 문제를 극복하기 위한 솔루션을 살펴봅니다.
개인을 식별하기 위해 하위 유형의 정수 상수를 나타내는 PersonID 유형의 예를 고려하세요. 우리는 JSON 문자열의 자동 변환을 지원하기 위해 이 유형의 기능을 확장하려고 합니다. 이 유형에 대해 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을 성공적으로 구현할 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3