我是一个新的地鼠,如果我定义了一个自定义错误,我真的被变量类型搞糊涂了
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”同时显示了两种类型。e 的类型到底是什么?为什么“错误”是一个接口,也可以用作返回类型?
非常感谢
沧海一幻觉
眼眸繁星
相关分类