我试图创建子类型GO错误。 我问一个问题先前关于此事。
现在我'面临着多种类型的问题。 下面的代码是错误的类型定义:
/* Interfaces */
type UniversalError interface {
CommonError1
}
type CommonError1 interface {
error
CommonError1()
}
/* Structs */
type Error1 struct {
reason string
}
type Error2 struct {
reason string
}
type Error3 struct {
reason string
}
/* Interface function implementations */
func (error1 Error1) Error() string {
return fmt.Sprintf(error1.reason)
}
func (error2 Error2) Error() string {
return fmt.Sprintf(error2.reason)
}
func (error3 Error3) Error() string {
return fmt.Sprintf(error3.reason)
}
func (Error1) CommonError1() {}
func (Error2) CommonError1() {}
func (Error3) UniversalError() {}
当我尝试运行下面的代码:
func main() {
var err1 = Error1{reason: "Error reason 1"}
var err2 = Error2{reason: "Error reason 2"}
var err3 = Error3{reason: "Error reason 3"}
fmt.Println("\n**** Types *****")
printType(err1)
printType(err2)
printType(err3)
}
func printType(param error) {
switch param.(type) {
case UniversalError:
switch param.(type) {
case CommonError1:
switch param.(type) {
case Error1:
fmt.Println("Error1 found")
case Error2:
fmt.Println("Error2 found")
default:
fmt.Println("CommonError1 found, but Does not belong to Error1 or Error2")
}
default:
fmt.Println("Error3 Found")
}
default:
fmt.Println("Error belongs to an unidentified type")
}
}
的printType()
函数打印以下内容:
**** Types *****
Error1 found
Error2 found
CommonError1 found, but Does not belong to Error1 or Error2
我需要的类型Error3
被认定为一个UniversalError
,但不能作为CommonError1
。 我怎样才能做到这一点? 这有什么错在我的做法?