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 중국어 웹사이트의 기타 관련 기사를 참조하세요!