【发布时间】:2019-06-16 14:28:06
【问题描述】:
如果我要定义自定义错误,我是一个新的 gopher,并且对变量类型感到非常困惑
import (
"fmt"
"reflect"
)
// custom errors
type myError struct {
msg string
}
func (m *myError) Error() string {
return m.msg
}
func errorGen() error {
return &myError{"custom error"}
}
生成一个新错误并检查它的类型
func main() {
e := errorGen()
fmt.Println(reflect.TypeOf(e).Kind()) // type = pointer
// first type assertion
_, ok := e.(error)
if ok {
fmt.Println("type assertion error") // type = error
}
// second type assertion
_, ok = e.(*myError)
if ok {
fmt.Println("type assertion *myError") // type = pointer
}
}
所以在上面的代码变量'e'同时显示2种类型。 e的类型到底是什么?为什么“error”是一个接口,也可以作为返回类型?
非常感谢
【问题讨论】:
标签: go types error-handling