在下面的Go函数中,当我尝试运行构建命令以生成pb.go文件时,我遇到错误。panic: 接口转换: 接口 {} 是 []uint8,而不是 *验证器。字段验证码 github.com/mygithub/myproject/plugin.getFieldValidatorIfAny(0xc0001d4b60、0x5b5020)关于如何解决此问题的任何建议func getFieldValidatorIfAny(field *descriptor.FieldDescriptorProto) *validator.FieldValidator { if field.Options != nil { v, err := proto.GetExtension(field.Options, validator.E_Field) if err == nil && v.(*validator.FieldValidator) != nil { return (v.(*validator.FieldValidator)) } } return nil}我正在尝试使用来自 https://github.com/mwitkow/go-proto-validators 添加验证
1 回答
慕容森
TA贡献1853条经验 获得超18个赞
根据 https://beta.pkg.go.dev/github.com/golang/protobuf/proto#GetExtension(强调我的):
如果描述符是类型完整的(即,扩展Desc.ExtensionType 为非零),则 GetExtension 将分析编码的字段并返回指定类型的 Go 值。如果该字段不存在,则返回默认值(如果指定了默认值),否则将报告错误错误扩展。
如果描述符的类型不完整(即,扩展Desc.ExtensionType 为零),则“扩展”将返回扩展字段的原始编码字节。
因此,这里似乎是“类型不完整”。您可能需要在定义扩展的包上添加依赖项,以便注册其类型 - 可能通过使用 import _ “example.com/some/proto”
将其链接到您的二进制文件。validator.E_Field
- 1 回答
- 0 关注
- 64 浏览
添加回答
举报
0/150
提交
取消