>  기사  >  백엔드 개발  >  다양한 구조 태그 세트를 사용하는 Golang Unmarshal

다양한 구조 태그 세트를 사용하는 Golang Unmarshal

WBOY
WBOY앞으로
2024-02-09 23:10:09522검색

具有不同结构标签集的 Golang Unmarshal

php 편집기 Baicao는 오늘 강력한 Golang 기능인 다양한 구조적 태그 세트를 사용한 비정렬화 기능을 소개합니다. Golang 프로그래밍에서 Unmarshal은 데이터를 구조로 변환하는 프로세스입니다. 그러나 데이터 소스에 다양한 구조적 태그 세트가 포함되어 있는 경우 기존 Unmarshal 방법은 요구 사항을 충족하지 못할 수 있습니다. 따라서 이 기능을 달성하려면 다른 구조적 태그 세트와 함께 Golang Unmarshal을 사용해야 합니다. 이번 글에서는 이 기능의 사용법과 주의사항을 자세히 소개하겠습니다. 함께 탐험해 보세요!

질문 내용

json에 맞춤 키 이름이 있는 타사 도구의 API를 사용하고 있습니다. 또한 두 가지 다른 환경(프로덕션 및 스테이징)에서 API를 사용해야 합니다. 불행하게도 API의 사용자 정의 필드는 동일한 데이터를 나타내기 위해 두 환경 모두에서 서로 다른 키 이름을 갖습니다. 아래 예에서는 json key custom-1 与暂存环境中的 json 密钥 custom-7 完全相同。我想将其中任何一个解组到相同的数据结构中,但我不知道如何进行。我希望有一种方法可以以某种方式覆盖 json.unmarshal() 函数用于在 prod 上使用 json 的标签,但在暂存时使用 jsonstaging 。对我来说,这是最有意义且最简单的解决方案。我猜我必须为我的 jsonobj 类型编写一个自定义 unmarshaljson(data []byte) error 함수가 프로덕션에 있지만 다시 사용자 정의 함수에서 원하는 동작을 달성하는 방법을 모르겠습니다. 누구든지 내가 사용할 수 있는 올바른 방향, 일부 문서 또는 몇 가지 예를 알려줄 수 있습니까?

으아아아

go run으로 실행하면

를 얻습니다. 으아아아

이것은 내 현재 코드가 기대하는 것이지만 나는

을 얻고 싶습니다. 으아아아

스테이징 환경이나 프로덕션 환경의 API는 수정할 수 없습니다.

다양한 구조와 인터페이스를 만들어 보았지만 필드(및 사용자 정의 json 키) 수가 증가함에 따라 유지 관리가 악몽인 것 같습니다. 이것이 유일한 방법이라면 도와주세요. 이것이 올바른 길이 아닐 수도 있다고 결정하기 전에는 작동하지 않았습니다.

해결 방법

나중에 참고하실 분들이 계시다면 내장된 reflect 패키지를 사용해서 방법을 찾은 것 같습니다.

먼저 json.unmarshal() 함수를 사용해야 하는데, 빌드하려는 객체 대신 map[string] 接口{}를 채워주세요.

그런 다음 환경과 지도를 가져오는 함수를 작성했습니다. 지도가 아닌 실제 개체의 새 인스턴스에 있는 모든 필드를 반복하고 사용 중인 환경에 대한 레이블을 가져옵니다. 그런 다음 새 개체의 필드를 objmap[tag].(<variable_type>)로 설정합니다. 레이블이 있는 모든 필드를 설정한 후에는 새 객체를 반환합니다.

내 작업 코드는 다음과 같습니다.

으아아아

위 내용은 다양한 구조 태그 세트를 사용하는 Golang Unmarshal의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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