データベースで使用するデータを構造化する場合、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 サイトの他の関連記事を参照してください。