【发布时间】:2019-04-26 15:13:55
【问题描述】:
假设我们想在error 接口上扩展Error() 函数。我们可以简单地创建一个从实现Error() 方法的字符串派生的结构。例如:
type NewUser struct {
Email string
Password string
}
type ErrMissingField string
func (e ErrMissingField) Error() string {
return string(e) + " is required"
}
func (u *NewUser) OK() error {
if len(u.Email) == 0 {
return ErrMissingField("email")
}
if len(u.Password) == 0 {
return ErrMissingField("password")
}
return nil
}
以上代码将返回email is required 或password is required。
但是,如果我创建自己的界面,比如说ResponseError,就像这样:
type ResponseError interface {
ErrorMsg() string
}
type CustomErr string
func (c CustomErr) ErrorMsg() string {
return "[Error] " + string(c)
}
func (u *NewUser) NewOK() ResponseError {
if len(u.Email) == 0 {
return CustomErr("Email required!")
}
if len(u.Password) == 0 {
return CustomErr("Password Required!")
}
return nil
}
它不会打印我用[Error] 编写的方法实现。它只是打印我传递给结构Email required! 或Password Required! 的字符串。
如何解决这个问题?
【问题讨论】:
-
您用来打印的代码在哪里?
-
你的目标是什么?我不明白你想要完成什么。
-
我使用 fmt 来打印错误信息。我的目标只是自定义错误界面。顺便说一句,nighfury 已经涵盖了答案