將gorm.Model 欄位整合到Protobuf 定義中
將gorm.Model 欄位(deleted_at、created_at、id 等)整合到proto中定義可能具有挑戰性,特別是因為proto3 沒有日期時間類型。不過,還是有可行的解決方案的。
自訂腳本方法
由於 protoc-gen-gorm 專案被證明不合適,一種解決方案是建立自訂後處理腳本。從 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>
這會將gorm 註解加入產生的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>
注意事項
以上是如何將 gorm.Model 欄位整合到 Protobuf 定義中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!