为了账号安全,请及时绑定邮箱和手机立即绑定

去构建命令抛出 - panic:接口转换:接口 {} 是 []uint8,而不是 *验证器。

去构建命令抛出 - panic:接口转换:接口 {} 是 []uint8,而不是 *验证器。

Go
白猪掌柜的 2022-09-26 17:28:11
在下面的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


查看完整回答
反对 回复 2022-09-26
  • 1 回答
  • 0 关注
  • 52 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信