Unmarshal(Go 1.18)에서 일반 사용
다양한 보고서 유형을 담는 컨테이너를 만드는 등 Go 1.18에서 제네릭을 활용하는 경우, 유형 제약이 발생할 수 있습니다. 다음 설정을 고려하십시오.
유형 어설션을 수용하기 위해 GetBody() 함수에서 "자유 텍스트 의미 체계"로 이어지는 반환 유형에 대한 유형 제한 문제에 직면할 수 있습니다.
도전과제 및 솔루션
이 문제는 Go가 구조체에 대한 유형 어설션을 지원하지 않고 일반 유형에 대한 포인터를 허용하지 않기 때문에 발생합니다. 이 문제를 해결하기 위해 LocationID, Provider, ReportType 및 Body에 대한 Getter를 구현하는 인터페이스를 만들 수 있습니다. 그러나 이 솔루션에는 유형 안전성이 희생되어야 합니다.
더 안전한 접근 방식은 매개변수 다형성을 포기하고 JSON 역마샬링 중 판별자 값을 기반으로 구체적인 스위치 문을 활용하는 것입니다. 이렇게 하면 각 보고서 유형에 올바른 구체적인 유형이 사용됩니다.
대체 접근 방식
동적 JSON 구문 분석의 경우 일반 비정렬 함수를 사용할 수 있습니다.
<code class="go">func unmarshalAny[T any](bytes []byte) (*T, error) { out := new(T) if err := json.Unmarshal(bytes, out); err != nil { return nil, err } return out, nil }</code>
이 함수는 유연성을 제공하지만 구현이 최소화된 경우 역마샬링 논리를 직접 인라인하는 것과 동일한 작업만 수행한다는 점에 유의해야 합니다. 따라서 이 기능을 사용하는 것은 추가 논리를 도입하는 경우에만 정당화됩니다.
요약하자면, 구체적인 유형 및 JSON 역마샬링 작업을 수행할 때 제네릭의 필요성을 신중하게 고려하세요. 필요한 경우 유형 안전성을 손상시키지 않고 스위치 기반 솔루션을 선택하고, 불필요하게 기능을 복제하는 일반 기능을 사용할 때는 주의하십시오.
위 내용은 Go 1.18에서 일반 유형으로 JSON을 안전하게 역마샬링하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!