golang异常处理

一、参考

Writing Web Applications

错误处理(上)

Error Handling — Draft Design

Golang Error Handling — Best Practice in 2020

二、忽略异常

使用_可以忽略异常

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)
	}
}

原文地址:https://www.cnblogs.com/thewindyz/p/14073933.html