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:\"\"/"" } cat profile/profile.pb.go \ | g "id" "primary_key" \ | g "name" "varchar(100)" \ > profile/profile.pb.go.tmp && 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>
考慮事項
以上がgorm.Model フィールドを Protobuf 定義に統合するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。