Go обрабатывает type
s, которые реализуют error
по-разному при печати.Ваш интерфейс ResponseError
не не реализует error
путем добавления Error() string
.
Чтобы увидеть, о чем я говорю, посмотрите следующий пример с использованием интерфейса error
:
type NewUser struct {
Email string
Password string
}
type ResponseError interface {
error
ErrorMsg() string
}
type CustomErr string
func (c CustomErr) ErrorMsg() string {
return "[Error] " + string(c)
}
func (c CustomErr) Error() string {
return c.ErrorMsg()
}
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
}
func main() {
user := NewUser{}
fmt.Printf("Using %%s: %s\n", user.NewOK())
fmt.Printf("Using %%v: %v\n", user.NewOK())
fmt.Printf("Using %%v and call function ErrorMsg: %v\n", user.NewOK().ErrorMsg())
fmt.Printf("Using %%s and call function ErrorMsg: %s\n", user.NewOK().ErrorMsg())
}
Будет напечатано следующее:
Using %s: [Error] Email required!
Using %v: [Error] Email required!
Using %v and call function ErrorMsg: [Error] Email required!
Using %s and call function ErrorMsg: [Error] Email required!
Однако без интерфейса error
:
type NewUser struct {
Email string
Password string
}
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
}
func main() {
user := NewUser{}
fmt.Printf("Using %%s: %s\n", user.NewOK())
fmt.Printf("Using %%v: %v\n", user.NewOK())
fmt.Printf("Using %%v and call function ErrorMsg: %v\n", user.NewOK().ErrorMsg())
fmt.Printf("Using %%s and call function ErrorMsg: %s\n", user.NewOK().ErrorMsg())
}
Вывод:
Using %s: Email required!
Using %v: Email required!
Using %v and call function ErrorMsg: [Error] Email required!
Using %s and call function ErrorMsg: [Error] Email required!