如何使用错误界面

时间:2017-11-30 22:27:50

标签: go

我的来源如下:

type Record struct {
    Message string `json:"message"`
    Service string `json:"service"`
    Success bool   `json:"success"`
    Error   string `json:"error"`
}

func (zp *Zephyr) Write(err ...*error) {

    if len(err) > 0 {
        errPtr := err[0]
        if errPtr != nil && *errPtr != nil {
            // error occurred, set success to false and Error to the error message
            zp.Success = false
            zp.Error = errPtr
        } else {
            zp.Success = true
        }
    }
}

我不明白的是如何访问errPtr中嵌入的字符串?

1 个答案:

答案 0 :(得分:2)

首先,您可能不想*error,您很可能只想要error;接口指针很少是正确的选择。

其次,string中不一定嵌入errordefinition of error只不过是:

type error interface {
        Error() string
}

这意味着如果调用Error()方法,它将返回一个字符串,但每次调用该方法时都可能生成该字符串;它不一定是错误对象中的字符串字段。

最有可能的是,你想要的是这样的:

func (zp *Zephyr) Write(err ...error) {

    if len(err) > 0 {
        errPtr := err[0]
        if errPtr != nil {
            // error occurred, set success to false and Error to the error message
            zp.Success = false
            zp.Error = errPtr.Error()
        } else {
            zp.Success = true
        }
    }
}

如果您无法更改签名,则只需取消引用指针:

zp.Error = (*errPtr).Error()

这里的游乐场示例:https://play.golang.org/p/dxT108660l

the Go tour中也包含错误。