一、参考
二、忽略异常
使用_
可以忽略异常
body, _ := ioutil.ReadFile(filename)
body, err := ioutil.ReadFile(filename)
三、具体错误
3.1 判断
对于具体错误的判断,Go 语言中都有哪些惯用法?
怎样判断一个错误值具体代表的是哪一类错误?
由于 error 是一个接口类型,所以即使同为 error 类型的错误值,它们的实际类型也可能不同
(1) 对于类型在已知范围内的一系列错误值,一般使用类型断言表达式或类型 switch 语句来判断;
(2) 对于已有相应变量且类型相同的一系列错误值,一般直接使用判等操作来判断
(3) 对于没有相应变量且类型未知的一系列错误值,只能使用其错误信息的字符串表示形式来做判断
// 根据err type,进行不同的处理
func underlyingError(err error) error {
switch err := err.(type) {
case *os.PathError:
return err.Err
case *os.LinkError:
return err.Err
case *os.SyscallError:
return err.Err
case *exec.Error:
return err.Err
}
return err
}
// print error
func printError(i int, err error) {
if err == nil {
fmt.Println("nil error")
return
}
err = underlyingError(err)
// 判断err为具体值
switch err {
case os.ErrClosed:
fmt.Printf("error(closed)[%d]: %s
", i, err)
case os.ErrInvalid:
fmt.Printf("error(invalid)[%d]: %s
", i, err)
case os.ErrPermission:
fmt.Printf("error(permission)[%d]: %s
", i, err)
}
}