「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > GORM フィールドのアノテーションを Protobuf 定義に統合するにはどうすればよいですか?

GORM フィールドのアノテーションを Protobuf 定義に統合するにはどうすればよいですか?

2024 年 11 月 8 日に公開
ブラウズ:385

How to Integrate GORM Field Annotations into Protobuf Definitions?

フィールド アノテーションを Protobuf 定義に統合する

GORM によって提供されるフィールド アノテーションを protobuf 定義内で利用しようとしている開発者は、protobuf 定義が存在しないため、問題が発生する可能性があります。

これに対処するには、後処理スクリプトを使用して、生成された proto ファイルに必要な GORM アノテーションを追加できます。たとえば、次の protobuf プロファイル定義があるとします。

message Profile {
  uint64 id = 1;
  string name = 2;
  bool active = 3;
}

次のスクリプト ("gorm.sh") は後処理に使用できます:

#!/bin/bash

g () {
  sed "s/json:\"$1,omitempty\"/json:\"$1,omitempty\" gorm:\"$2\"/"
}

cat $1 \
| g "id" "primary_key" \
| g "name" "varchar(100)" \
> $1.tmp && mv $1{.tmp,}

生成された protobuf ファイル (例: ./gorm.sh profile/profile.pb.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"`
}
//...

このアプローチにより、カスタム実装やサードパーティ ライブラリを必要とせずに、GORM フィールド アノテーションを protobuf 定義に統合できます。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3