我的来源如下:
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
中嵌入的字符串?
答案 0 :(得分:2)
首先,您可能不想*error
,您很可能只想要error
;接口指针很少是正确的选择。
其次,string
中不一定嵌入error
。 definition 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中也包含错误。