>백엔드 개발 >Golang >구조체를 조각으로 역마샬링하기 위한 일반 유형 정의

구조체를 조각으로 역마샬링하기 위한 일반 유형 정의

王林
王林앞으로
2024-02-06 08:54:041132검색

구조체를 조각으로 역마샬링하기 위한 일반 유형 정의

질문 내용

일반적으로 배열을 배열을 포함하는 객체로 반환하는 API가 있습니다. 다음 예를 들어보세요.

으아악

API는 수십 곳에서 매번 다른 이름으로 이 작업을 수행합니다. 이는 두 개의 키로만 발생하는 것이 보장됩니다. 그 중 하나는 number이고 다른 하나는 배열입니다.

불필요한 필드 레벨을 지속적으로 탐색해야 하므로 결과 구조가 사용하기 다소 불편해집니다.

나는 Go 인터페이스가 다음과 같은 형식을 갖고 있다고 가정하고 싶습니다:

으아악

한 가지 옵션은 각 발생에 대해 사용자 정의 UnmarshalJSON 함수를 작성하는 것입니다. 그러나 이는 특히 거의 모든 구조에 나타나는 점을 고려하면 번거로워 보입니다. 제가 생각해낸 해결책은 자체적으로 처리할 수 있는 일반 유형입니다.

현재 시도는 다음과 같습니다.

으아악

사용방법은 다음과 같습니다

으아악

다음 오류가 발생합니다.

으아악

UnmarshalJSON 代码的最大部分似乎是正确的,因为我的调试器向我显示 sliceVal 正是我所期望的。解组回 NestedArray[T] 내 디버거에서 sliceVal이 내가 기대했던 것과 정확히 일치한다는 것을 보여 주었기 때문에 코드의 가장 큰 부분이 올바른 것 같습니다. NestedArray[T] 유형으로 다시 역마샬링하는 동안 오류가 발생했습니다.

이 문제를 해결할 방법이 있나요? 지금 하고 있는 것보다 더 좋은 방법이 있을까요? 이것이 나에게 가장 깨끗한 것 같지만 제안에 열려 있습니다.


정답


NestedArray[T].UnmarshalJSON 메서드는 자신을 재귀적으로 호출합니다. 수정하려면 bytes 中的 JSON 对象,但它收到了一个 JSON 数组。通过解组到 []T 而不是 NestedArray[T]이 필요하기 때문에 내부 호출에서 오류가 발생합니다.

오류와 관련 없이 NestedArray[T].UnmarshalJSON 메서드가 불필요한 인코딩 및 디코딩을 수행했습니다. json.RawMessage를 사용하여 수정하세요.

다음은 두 가지 수정 사항이 모두 포함된 코드입니다.

으아악

놀이터에서 코드를 실행해보세요! .

위 내용은 구조체를 조각으로 역마샬링하기 위한 일반 유형 정의의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제