Вы можете перечислить несколько типов в case
, так что это будет делать то, что вы хотите:
switch t := param.(type) {
case Error1, Error2:
fmt.Println("Error1 or Error 2 found")
default:
fmt.Println(t, " belongs to an unidentified type")
}
Тестирование:
printType(Error1{})
printType(Error2{})
printType(errors.New("other"))
Вывод (попробуйте на Go Playground ):
Error1 or Error 2 found
Error1 or Error 2 found
other belongs to an unidentified type
Если вы хотите «сгруппировать» ошибки, другое решение заключается в создании «маркерного» интерфейса:
type CommonError interface {
CommonError()
}
Какой Error1
и Error2
должны реализовывать:
func (Error1) CommonError() {}
func (Error2) CommonError() {}
И тогда вы можете сделать:
switch t := param.(type) {
case CommonError:
fmt.Println("Error1 or Error 2 found")
default:
fmt.Println(t, " belongs to an unidentified type")
}
Тестирование с тем же, вывод тот же.Попробуйте на Go Playground .
Если вы хотите ограничить CommonError
s, чтобы быть "истинными" ошибками, также вставьте интерфейс error
:
type CommonError interface {
error
CommonError()
}