首頁 >後端開發 >Golang >如何將 gorm.Model 欄位整合到 Protobuf 定義中?

如何將 gorm.Model 欄位整合到 Protobuf 定義中?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-29 06:11:02384瀏覽

How to integrate gorm.Model fields into Protobuf definitions?

將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:\"\"/&quot;"
}

cat profile/profile.pb.go \
| g "id" "primary_key" \
| g "name" "varchar(100)" \
> profile/profile.pb.go.tmp &amp;&amp; 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>

注意事項

  • 此方法需要後處理和可能不適合大型專案。
  • 確保自訂腳本遵循 protobuf 語法。
  • 測試對於驗證更新的 proto3 定義是否如預期運作至關重要。

以上是如何將 gorm.Model 欄位整合到 Protobuf 定義中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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