Я новый суслик, и меня действительно смущают типы переменных, если я определяю пользовательскую ошибку
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 типа одновременно.
Что именно типа е? и почему «ошибка» является интерфейсом и также может использоваться как тип возвращаемого значения?
Большое спасибо