doumen5087 2016-08-17 18:47
浏览 48
已采纳

类型比较时编译错误

I get the compile error shown below saying that the ErrFieldMismatch type is missing an Error() method, but as shown in the last code chunk, it is not.

Any idea to why I cannot perform the type comparison for this?

Error

impossible type switch case: err (type error) cannot have dynamic type "google.golang.org/appengine/datastore".ErrFieldMismatch (missing Error method)

my code

type Program struct {
    aemodel.Base

    Name        string   `json:"name" required:"true"`
    Public      bool     `json:"isPublic"`
    Description string   `json:"description" required:"true"`
    Default     bool     `json:"isDefault"`
    Tags        []string `json:"tags"`

    // Level int
}

// Load - PropertyLoadSaver interface
func (p *Program) Load(ps []datastore.Property) error {
    if err := datastore.LoadStruct(p, ps); err != nil {
        switch err.(type) {
        case datastore.ErrFieldMismatch:  // <-- Failure point
            return nil
        default:
            return err
        }
    }
    return nil
}

appengine code

type ErrFieldMismatch struct {
    StructType reflect.Type
    FieldName  string
    Reason     string
}

func (e *ErrFieldMismatch) Error() string {
    return fmt.Sprintf("datastore: cannot load field %q into a %q: %s",
        e.FieldName, e.StructType, e.Reason)
}
  • 写回答

1条回答 默认 最新

  • dtf54486 2016-08-17 18:52
    关注

    Error method is defined on the type that is a pointer to datastore.ErrFieldMismatch, i.e., Error is defined on *datastore.ErrFieldMismatch, hence it's only *datastore.ErrFieldMismatch that implements the Error interface.

    Try changing your case expression:

    func (p *Program) Load(ps []datastore.Property) error {
        if err := datastore.LoadStruct(p, ps); err != nil {
            switch err.(type) {
            case *datastore.ErrFieldMismatch:  // use pointer type here
                return nil
            default:
                return err
            }
        }
        return nil
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 宇视监控服务器无法登录
  • ¥15 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥15 DruidDataSource一直closing
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
  • ¥50 STM32单片机传感器读取错误
  • ¥50 power BI 从Mysql服务器导入数据,但连接进去后显示表无数据