при использовании составной структуры вы можете легко сопоставить error, myError или что-то еще.
error и myError являются исключительными в одном и том же операторе switch, но это не должно быть проблемой.
Создание экземпляранемного отличается myError{error:fmt.Errorf("TEST2")}
.
Вам не нужно использовать ptr * myError (т. е. &myError..
), поскольку error является интерфейсом, поэтому он будет соответствовать набору методов, определенному в получателе значений вашего типа.
package main
import (
"fmt"
)
type myError struct {
error
}
func checkType(value interface{}) {
switch value.(type) {
case myError:
fmt.Printf("%v is a myError\n", value)
// case error:
// fmt.Printf("%v is a %T\n", value, value)
default:
fmt.Printf("%v is something else\n", value)
}
}
func main() {
checkType(fmt.Errorf("TEST1"))
checkType(myError{error:fmt.Errorf("TEST2")})
}
выходы
TEST1 is something else
TEST2 is a myError