在建置資料庫所使用的資料時,必須將 gorm.Model 欄位整合到 protobuf 定義中。儘管 protobuf 缺乏日期時間類型,但可以透過自訂產生的 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>產生的Protobuf Go
<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>
自訂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 Go 檔案
此腳本此腳本以上是在處理日期時間類型時,如何將 gorm.Model 欄位整合到 Protobuf 定義中,不同方法的優缺點是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!