从多错误类型中检测特定错误
Detecting specific error from multi-error type
尝试区分错误的用户 cookie 错误与使用 gorilla/sessions
的内部错误,例如
import "github.com/gorilla/sessions"
sess, err := store.Get(r, sessName)
if err != nil {
// either user error (bad-cookie i.e. invalid HMAC)
// http.Error(w, "not authenticated", http.StatusUnauthorized)
// or server error (FileSystemStore i/o)
// http.Error(w, "internal error", http.StatusInternalServerError)
return
}
底层 securecookie
包有一个错误用户 cookie 的导出错误 ErrMacInvalid
。所以通常人们只会检查这个特定的错误,但这 not 工作:
import "github.com/gorilla/securecookie"
if err == securecookie.ErrMacInvalid {
// bad user-cookie
} else if err != nil {
// otherwise internal error
}
它不起作用的原因 - 使用 securecookie.NewCookieStore()
作为会话存储 - 它会 return 类型错误 securecookie.MultiError
([]error
类型)错误切片中列出了 securecookie.ErrMacInvalid
值。
尝试这样的事情似乎很费解:
if e2, ok := err.(securecookie.MultiError); ok && len(e2) > 0 && e2[0] == securecookie.ErrMacInvalid { {
// bad user-cookie
} else if err != nil {
// otherwise internal error
}
有没有更简单的方法?
is there an easier way?
没有。对不起。
尝试区分错误的用户 cookie 错误与使用 gorilla/sessions
的内部错误,例如
import "github.com/gorilla/sessions"
sess, err := store.Get(r, sessName)
if err != nil {
// either user error (bad-cookie i.e. invalid HMAC)
// http.Error(w, "not authenticated", http.StatusUnauthorized)
// or server error (FileSystemStore i/o)
// http.Error(w, "internal error", http.StatusInternalServerError)
return
}
底层 securecookie
包有一个错误用户 cookie 的导出错误 ErrMacInvalid
。所以通常人们只会检查这个特定的错误,但这 not 工作:
import "github.com/gorilla/securecookie"
if err == securecookie.ErrMacInvalid {
// bad user-cookie
} else if err != nil {
// otherwise internal error
}
它不起作用的原因 - 使用 securecookie.NewCookieStore()
作为会话存储 - 它会 return 类型错误 securecookie.MultiError
([]error
类型)错误切片中列出了 securecookie.ErrMacInvalid
值。
尝试这样的事情似乎很费解:
if e2, ok := err.(securecookie.MultiError); ok && len(e2) > 0 && e2[0] == securecookie.ErrMacInvalid { {
// bad user-cookie
} else if err != nil {
// otherwise internal error
}
有没有更简单的方法?
is there an easier way?
没有。对不起。