首页  >  文章  >  后端开发  >  如何将 gorm.Model 字段集成到 Protobuf 定义中?

如何将 gorm.Model 字段集成到 Protobuf 定义中?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-29 06:11:02330浏览

How to integrate gorm.Model fields into Protobuf definitions?

将 gorm.Model 字段集成到 Protobuf 定义中

将 gorm.Model 字段(deleted_at、created_at、id 等)集成到 proto3 中定义可能具有挑战性,特别是因为 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