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

在下面的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 添加验证


白猪掌柜的
浏览 65回答 1
1回答

慕容森

根据 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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go