>백엔드 개발 >Golang >Go에서 임베디드 구조체를 비정렬화하는 방법은 무엇입니까?

Go에서 임베디드 구조체를 비정렬화하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-04 12:13:30838검색

How to Unmarshal Embedded Structs in Go?

Go에서 임베디드 구조체 언마샬링

이 문서에서는 JSON 데이터를 임베디드 구조체가 포함된 구조체로 언마샬링하는 문제를 다룹니다. Inner 구조체가 Outer 구조체에 포함된 제공된 예제에서는 Inner에 대한 기본 UnmarshalJSON 메서드가 호출되고 Data 필드만 채워지고 Outer의 Num 필드는 비어 있는 상태로 유지되는 것을 보여줍니다.

이유 이 동작은 Go의 임베디드 구조체 메커니즘에 있습니다. 포함된 구조체가 언마샬링되면 언마샬링 프로세스는 포함된 구조체를 직접 대상으로 하고 외부 구조체의 필드를 무시합니다.

이 문제를 해결하기 위해 더 간단하고 효율적인 솔루션이 제안됩니다. 즉, 내부 구조체를 명시적 필드로 만드는 것입니다.

Inner를 필드로 명시적으로 선언하면 전체 JSON 데이터와 함께 Outer 구조체의 UnmarshalJSON 메서드가 호출됩니다. 이 메서드 내에서 Inner의 Data 필드는 포함된 Inner 구조체의 UnmarshalJSON 메서드를 사용하여 채울 수 있고, Num 필드는 별도로 채울 수 있습니다. 이 접근 방식을 사용하면 비정렬화 중에 외부 구조체의 두 필드가 모두 올바르게 채워지도록 할 수 있습니다.

다음은 솔루션을 설명하는 실제 예제입니다.

<code class="go">type Outer struct {
    I Inner     // Inner as explicit field
    Num int `json:"Num"`
}</code>

위 내용은 Go에서 임베디드 구조체를 비정렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.