ホームページ > バックエンド開発 > Golang > gorm.Model フィールドを Protobuf 定義に統合するにはどうすればよいですか?

gorm.Model フィールドを Protobuf 定義に統合するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-10-29 06:11:02
オリジナル
351 人が閲覧しました

How to integrate gorm.Model fields into Protobuf definitions?

gorm.Model フィールドを Protobuf 定義に統合する

gorm.Model フィールド (deleted_at、created_at、id など) を proto3 に統合する特に proto3 には datetime 型がないため、定義は難しい場合があります。ただし、実行可能な解決策はあります。

カスタム スクリプトのアプローチ

protoc-gen-gorm プロジェクトは不適切であることが判明したため、解決策の 1 つはカスタムの後処理スクリプトを作成することです。 。 protobuf から go ファイルを生成した後、このスクリプトは proto3 定義ファイルを操作して、必要な gorm フィールドを含めることができます。

例:

proto ファイル プロファイルがある場合/profile.proto:

message Profile {
  uint64 id = 1;
  string name = 2;
  bool active = 3;
  // ...
}
ログイン後にコピー

標準の protoc コマンドを使用して初期 go ファイルを生成します:

protoc profile/profile.proto --go_out=plugins=grpc:profile
ログイン後にコピー

次に、gorm.sh スクリプトを使用して gorm アノテーションを追加します:

<code class="bash">#!/bin/bash

g () {
  sed "s/json:\",omitempty\"/json:\",omitempty\" gorm:\"\"/&quot;"
}

cat profile/profile.pb.go \
| g "id" "primary_key" \
| g "name" "varchar(100)" \
> profile/profile.pb.go.tmp &amp;&amp; mv profile/profile.pb.go{.tmp,}</code>
ログイン後にコピー

これにより、生成された go ファイルに gorm アノテーションが追加されます。

<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 構文に従っていることを確認してください。
  • 更新された proto3 定義が意図したとおりに動作することを確認するには、テストが重要です。

以上がgorm.Model フィールドを Protobuf 定義に統合するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート