ホームページ  >  記事  >  バックエンド開発  >  datetime 型を処理しながら gorm.Model フィールドを Protobuf 定義に統合するにはどうすればよいですか?また、さまざまな方法の長所と短所は何ですか?

datetime 型を処理しながら gorm.Model フィールドを Protobuf 定義に統合するにはどうすればよいですか?また、さまざまな方法の長所と短所は何ですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-01 06:44:02868ブラウズ

How do you integrate gorm.Model fields into Protobuf definitions while handling datetime types, and what are the pros and cons of different methods?

Gorm モデル フィールドの Protobuf 統合

データベースで使用するデータを構造化する場合、gorm.Model フィールドを protobuf 定義に統合することが必要になります。 protobuf には datetime 型がないにもかかわらず、生成された protobuf コードをカスタマイズすることで解決策を考案できます。

protoc-gen-gorm を使用した失敗した解決策

protoc-gen-gorm プロジェクトは、ブレンド プロセス中に proto2 と proto3 が衝突する可能性があるため、無駄であることが判明しました。

後処理用のカスタム スクリプト

別のアプローチは次のとおりです。 protobuf から go ファイルを生成した後、後処理用のカスタム スクリプトを作成します。ソリューションの内訳は次のとおりです。

元の Protobuf ファイル

<code class="proto">message Profile {
  uint64 id = 1;
  string name = 2;
  bool active = 3;
}</code>

生成された Protobuf Go ファイル

<code class="go">type Profile struct {
    state         protoimpl.MessageState
    sizeCache     protoimpl.SizeCache
    unknownFields protoimpl.UnknownFields

    Id     uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
    Name   string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
    Active bool   `protobuf:"varint,3,opt,name=active,proto3" json:"active,omitempty"`
}</code>

カスタム GORM スクリプト

<code class="bash">g () {
  sed "s/json:\",omitempty\"/json:\",omitempty\" gorm:\"type:\"/"
}

cat  \
| g "id" "primary_key" \
| g "name" "varchar(100)" \
> .tmp && mv {.tmp,}</code>

後処理された Protobuf Go ファイル

<code class="go">type Profile struct {
    state         protoimpl.MessageState
    sizeCache     protoimpl.SizeCache
    unknownFields protoimpl.UnknownFields

    Id     uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty" gorm:"type:primary_key"`
    Name   string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty" gorm:"type:varchar(100)"`
    Active bool   `protobuf:"varint,3,opt,name=active,proto3" json:"active,omitempty"`
}</code>

このスクリプトは、生成された protobuf Go に gorm フィールド タグを追加しますファイルを使用すると、protobuf 定義を gorm.Model フィールドと統合して、シームレスなデータベース操作を実現できます。

以上がdatetime 型を処理しながら gorm.Model フィールドを Protobuf 定義に統合するにはどうすればよいですか?また、さまざまな方法の長所と短所は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。