首頁  >  文章  >  後端開發  >  在處理日期時間類型時,如何將 gorm.Model 欄位整合到 Protobuf 定義中,不同方法的優缺點是什麼?

在處理日期時間類型時,如何將 gorm.Model 欄位整合到 Protobuf 定義中,不同方法的優缺點是什麼?

Susan Sarandon
Susan Sarandon原創
2024-11-01 06:44:02868瀏覽

How do you integrate gorm.Model fields into Protobuf definitions while handling datetime types, and what are the pros and cons of different methods?

Gorm 模型欄位的 Protobuf 整合

在建置資料庫所使用的資料時,必須將 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn