[英]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://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.