异常处理

异常处理:  使用 defer,panic,recover

go中抛出一个panic异常,然后在defer中通过recover捕获这个异常,进行处理

package main

import (
	"fmt"
)

func main() {

	defer func() {
		err := recover()
		if err != nil {
			fmt.Println("错误提示:",err)
			fmt.Println("进行错误处理 ......")
		}
	}()

	num1 := 10
	num2 := 0
	res := num1 / num2
	fmt.Println("计算结果:",res)

}

自定义报错:  使用errors.New 和 panic 内置函数

errors.New("错误说明"),会返回一个error类型的值,表示一个错误

panic内置函数,接收一个interface{}类型的值作为参数(可以是任何值),可以接收error类型的变量,输出错误信息,并退出程序。

package main

import (
	"fmt"
	"errors"
)

func readConf(name string) (err error) {
	
	if name == "config.ini" {
		return nil
	} else {
		return errors.New("读取文件失败.....")
	}
}

func test() {

	// 处理自定义报错
	defer func() {
        err := recover()
        if err != nil {
            fmt.Println("错误提示:",err)
            fmt.Println("进行错误处理 ......")
        }
    }()

	err1 := readConf("lalalalala")
	if err1 != nil {
		panic(err1)
	}
	fmt.Println("test继续执行")
}

func main() {
	test()
	fmt.Println("main执行完毕")
}

  

package main

import (
    "fmt"
    "errors"
)

func readConf(name string) (err error) {
    
    if name == "config.ini" {
        return nil
    } else {
        return errors.New("读取文件失败.....")
    }
}

func test() {

    // 处理自定义报错
    defer func() {
        err := recover()
        if err != nil {
            fmt.Println("错误提示:",err)
            fmt.Println("进行错误处理 ......")
        }
    }()

    err1 := readConf("lalalalala")
    if err1 != nil {
        panic(err1)
    }
    fmt.Println("test继续执行")
}

func main() {
    test()
    fmt.Println("main执行完毕")
}
原文地址:https://www.cnblogs.com/yizhixiaowenzi/p/14647637.html