ホームページ  >  記事  >  バックエンド開発  >  protojson 形式の Firestore クラウド イベントをマップインターフェースまたは構造体にアンマーシャルします。{}

protojson 形式の Firestore クラウド イベントをマップインターフェースまたは構造体にアンマーシャルします。{}

WBOY
WBOY転載
2024-02-13 23:09:08468ブラウズ

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

#php エディタ Zimo は、この記事で、protojson 形式の Firestore クラウド イベントをマップ[インターフェース{}] または構造にアンマーシャリングする方法を紹介します。 Firestore は Google Cloud が提供する柔軟なドキュメント データベース ソリューションであり、protojson はプロトコル バッファー データを JSON 形式に変換するツールです。 Firestore クラウド イベントをアンマーシャリングする方法を理解することは、Firestore Database を使用する開発者にとって重要なスキルです。この記事では、開発者が Firestore Database の機能をより効果的に活用できるように、アンマーシャリングの手順と注意事項について詳しく説明します。

質問内容

すべての protobuf データ型タグを使用せずに、protojson 形式の Firestore データを map[string]interface{} または struct にアンマーシャリングする簡単な方法はありますか?つまり、protojson データを平坦化します。

新しい Firebase ドキュメントが作成されるたびに起動される Google Cloud 関数があります (「クラウド イベント」)。このクラウド イベントには、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)
}

解決策

私は、この課題を解決するために、「firestruct」というオープンソースの Go パッケージを作成しました。ここで見つけることができます: github.com/bennovw/firestruct フィードバックや貢献は大歓迎です。

結局、Firestore フィールドを一致するマップに再帰的に解凍する関数を作成することになりました。次に、cloud.google.com/go/firestore の DataTo() メソッドをリファクタリングして、マップを構造体にアンマーシャリングしました。

以上がprotojson 形式の Firestore クラウド イベントをマップインターフェースまたは構造体にアンマーシャルします。{}の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。