• 5自定义errors


    Go 语言中的错误处理是把错误当成一种值来处理,更强调判断错误、处理错误,而不是用 catch 捕获异常

    1 异常抛出与处理

    package main
    
    import "fmt"
    
    func slicePanic()  {
    	var s =[]int{4,5,6}
    	fmt.Println(s[9])
    }
    
    func getCircleArea(radius float32)float32{
    	if radius<=0{
    		panic("半径不能为0")
    	}
    	return 3.14*radius*radius
    }
    
    func recoverSlicePanic()  {
    	defer func() {
    		if err:=recover();err!=nil{
    			fmt.Println(err)
    		}
    	}()
    	slicePanic()
    }
    func recoverGetCircleArea(){
    	defer func() {
    		if err:=recover();err!=nil{
    			fmt.Println(err)
    		}
    	}()
    	getCircleArea(-9)
    }
    func main() {
    	//1 系统抛出异常
    	//slicePanic()
    	//2 用户抛出异常
    	//res:=getCircleArea(-2)
    	//fmt.Println(res)
    
    	// 3 处理系统抛出异常
    	//recoverSlicePanic()
    
    	// 4 处理用户抛出异常
    	recoverGetCircleArea()
    }
    
    

    2 返回并处理错误

    package main
    
    import (
    	"errors"
    	"fmt"
    )
    
    // 返回错误
    func getCircleArea(radius float32) (float32, error) {
    	if radius <= 0 {
    		return 0, errors.New("半径不能小于0")
    	}
    	return 3.14 * radius * radius, nil
    }
    func main() {
    	res,err:=getCircleArea(9)
    	if err != nil {
    		fmt.Println(err)
    	}else {
    		fmt.Println("圆的面积为",res)
    	}
    
    }
    
    

    3 Error 接口

    3.1 error接口类型

    Go 语言中使用一个名为 error 接口来表示错误类型。

    type error interface {
        Error() string
    }
    

    error 接口只包含一个方法——Error,这个函数需要返回一个描述错误信息的字符串。

    当一个函数或方法需要返回错误时,我们通常是把错误作为最后一个返回值

    由于 error 是一个接口类型,默认零值为nil。所以我们通常将调用函数返回的错误与nil进行比较,以此来判断函数是否返回错误

    3.2 创建错误

    我们可以根据需求自定义 error,最简单的方式是使用errors 包提供的New函数创建一个错误。

    errors.New

    func New(text string) error
    

    它接收一个字符串参数返回包含该字符串的错误。我们可以在函数返回时快速创建一个错误

    if radius <= 0 {
    	return 0, errors.New("半径不能小于0")
    }
    

    4 自定义错误

    只要实现了error接口中的Error方法,就叫实现该接口,就是我们自定义的错误

    package main
    
    import (
    	"fmt"
    )
    
    type radiusError struct {
    	radius string
    }
    
    func (r *radiusError)Error()string  {
    	return "出现错误,错误原因为:"+r.radius
    }
    
    func getCircleArea(radius float32) (float32, error) {
    	if radius <= 0 {
    		return 0, &radiusError{radius:"半径不能小于0",}
    	}
    	return 3.14 * radius * radius, nil
    }
    func main() {
    	res,err:=getCircleArea(-9)
    	if err != nil {
    		fmt.Println(err)
    	}else {
    		fmt.Println("圆的面积为",res)
    	}
    
    
    }
    
    
  • 相关阅读:
    Bash Shell 快捷键
    vector-swap
    vector-swap
    vector-size
    Android网络篇
    应用 Valgrind 发现 Linux 程序的内存问题
    树莓派初学者?先做做这十个项目吧
    树莓派 (为学习计算机编程教育设计的一种微型电脑)
    微软windows10 IOT支持PI3之后,树莓派3更是将获得Android官方原生支持
    Linux基金会宣布JS Foundation基金会成立 前身为jQuery团队
  • 原文地址:https://www.cnblogs.com/liuqingzheng/p/16028187.html
Copyright © 2020-2023  润新知