将 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:\"\"/"" } cat profile/profile.pb.go \ | g "id" "primary_key" \ | g "name" "varchar(100)" \ > profile/profile.pb.go.tmp && 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>
注意事项
以上是如何将 gorm.Model 字段集成到 Protobuf 定义中?的详细内容。更多信息请关注PHP中文网其他相关文章!