zoukankan      html  css  js  c++  java
  • 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)
    	}
    }
    
    
  • 相关阅读:
    ICS SIP Call移植
    ubuntu常用软件安装
    ubuntu开机自动设置屏幕亮度
    书摘《苹果是方的》
    dbml 添加时自动生成 Guid & DataTime
    English 中有趣的a和d
    asp.net 生成ul控件
    lambda c# 3.0
    0809 END Lakers
    linq c# 3.0
  • 原文地址:https://www.cnblogs.com/thewindyz/p/14073933.html
Copyright © 2011-2022 走看看