>백엔드 개발 >Golang >protojson 형식의 Firestore 클라우드 이벤트를 mapinterface{} 또는 구조체로 역마샬링

protojson 형식의 Firestore 클라우드 이벤트를 mapinterface{} 또는 구조체로 역마샬링

WBOY
WBOY앞으로
2024-02-13 23:09:08503검색

将 protojson 格式的 Firestore 云事件解组到 mapinterface{} 或结构中

이 기사에서 PHP 편집자 Zimo는 protojson 형식의 Firestore 클라우드 이벤트를 map[interface{}] 또는 구조로 역마샬링하는 방법을 소개합니다. Firestore는 Google Cloud에서 제공하는 유연한 문서 데이터베이스 솔루션이고, protojson은 프로토콜 버퍼 데이터를 JSON 형식으로 변환하는 도구입니다. Firestore 클라우드 이벤트를 언마샬링하는 방법을 이해하는 것은 개발자가 Firestore 데이터베이스를 사용할 때 중요한 기술입니다. 이 문서에서는 개발자가 Firestore 데이터베이스의 기능을 더 잘 활용할 수 있도록 언마샬링하는 단계와 주의 사항을 자세히 설명합니다.

질문 내용

모든 protobuf 데이터 유형 태그를 사용하지 않고 protojson 형식의 Firestore 데이터를 map[string]interface{} 또는 구조체로 비정렬화하는 쉬운 방법이 있나요? 즉, protojson 데이터를 평면화합니다.

새 Firebase 문서가 생성될 때마다("클라우드 이벤트") 실행되는 Google 클라우드 기능이 있습니다. 이 클라우드 이벤트에는 protojson 형식의 수정된 문서를 포함한 상황별 정보가 포함되어 있습니다.

으아악 으아악

다음과 같이 각 항목 유형을 쉽게 검증하기 위해 이 protojson 문서의 덩어리를 사용자 정의 go 구조로 마샬링하고 싶습니다.

으아악

Firestore SDK에는 protojson 형식의 데이터를 사용자 정의 구조로 쉽게 역마샬링할 수 있게 해주는 datato 메서드가 포함되어 있습니다. 나는 매우 유사한 작업을 시도하고 있지만 이미 Firestore SDK 외부에서 문서 데이터를 가져오고 있습니다.

으아악
import (
    "google.golang.org/protobuf/encoding/protojson"
    "github.com/davecgh/go-spew/spew"
)

func cloudfunction(ctx context.context, e event.event) error {
    data := firestoredata.documenteventdata{}
    _ = protojson.unmarshal(e.dataencoded, &data);

    spew.dump(data)
}

Solution

저는 이 문제를 해결하기 위해 "firestruct"라는 오픈 소스 Go 패키지를 작성했습니다. 여기에서 찾을 수 있습니다: github.com/bennovw/firestruct 귀하의 피드백과 기여를 매우 환영합니다!

Firestore 필드를 일치하는 맵으로 재귀적으로 압축을 푸는 함수를 작성했습니다. 그런 다음 cloud.google.com/go/firestore에서 DataTo() 메서드를 리팩터링하여 지도를 구조체로 역마샬링했습니다.

위 내용은 protojson 형식의 Firestore 클라우드 이벤트를 mapinterface{} 또는 구조체로 역마샬링의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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