繁体   English   中英

Go build 命令抛出 - panic: interface conversion: interface {} is []uint8, not *validator.FieldValidator

[英]Go build command throws - panic: interface conversion: interface {} is []uint8, not *validator.FieldValidator

在下面的 Go 函数中,当我尝试运行 build 命令来生成 pb.go 文件时出现错误。 恐慌:接口转换:接口{}是[]uint8,不是*validator.FieldValidator 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添加验证

根据https://beta.pkg.go.dev/github.com/golang/protobuf/proto#GetExtension (强调我的):

如果描述符是类型完整的(即 ExtensionDesc.ExtensionType 非零),则 GetExtension 解析编码字段并返回指定类型的 Go 值。 如果该字段不存在,则返回默认值(如果指定了一个),否则报告 ErrMissingExtension。

如果描述符的类型不完整(即 ExtensionDesc.ExtensionType 为 nil),则 GetExtension 返回扩展字段的原始编码字节。

因此,这里的validator.E_Field似乎是“类型不完整”。 您可能需要在定义扩展的包上添加依赖项,以便注册其类型——也许通过使用import _ "example.com/some/proto"将其链接到您的二进制文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM