gpt4 book ai didi

google-app-engine - 类型比较编译错误

转载 作者:IT王子 更新时间:2023-10-29 01:58:37 25 4
gpt4 key购买 nike

我得到如下所示的编译错误,指出 ErrFieldMismatch 类型缺少 Error() 方法,但如最后一个代码块所示,它不是。

知道为什么我不能为此执行类型比较吗?

错误

不可能的类型切换案例:err(类型错误)不能有动态类型“google.golang.org/appengine/datastore”。ErrFieldMismatch(缺少错误方法)

我的代码

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
}

应用引擎代码

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)
}

最佳答案

Error 方法是在指向 datastore.ErrFieldMismatch 的指针类型上定义的,即 Error 是在 * 上定义的datastore.ErrFieldMismatch,因此只有 *datastore.ErrFieldMismatch 实现了 Error 接口(interface)。

尝试改变你的case表达式:

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
}

关于google-app-engine - 类型比较编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39004164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com