在构建数据库使用的数据时,必须将 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>
自定义 GORM 脚本
<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>
后处理的 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" 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 字段标签添加到生成的 protobuf Go 中文件,允许将 protobuf 定义与 gorm.Model 字段集成,以实现无缝数据库交互。
以上是在处理日期时间类型时,如何将 gorm.Model 字段集成到 Protobuf 定义中,不同方法的优缺点是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!