Golang 异常处理

在写 go 开发过程中我们要不断的写err判断,这个真是一个头疼的事情

下面我们来说说 golang 中关于错误处理的相关问题把

golang 中有一个error类型用来作为err信息处理

golang 中如何抛出异常和捕获异常

- 系统自己抛出异常
- 自己手动抛出异常,使用`panic()`函数手动抛出
- 使用`recover()`函数捕获异常
package main

import "fmt"

// 系统抛
func test001() {
	x := [5]int{0, 1, 2, 3, 4}
	x[1] = 10

	fmt.Println(x)

	// 超出索引触发异常
	index := 100
	x[index] = 20
	fmt.Println(x)
}

// 自己抛出异常
func getCircleArea(x float32) float32 {
	if x < 0 {
		// 手动使用panic触发异常
		panic("半径不能为负数")
	}
	return 3.14 * x * x
}

// 捕获panic异常
func test002() {
	defer func() {
		if err := recover(); err != nil {
			fmt.Println(err)
		}
	}()
	area := getCircleArea(-10)
	fmt.Println(area)
}

func main() {
	//test001()

	//area := getCircleArea(10)
	// 传一个负数触发异常
	//area := getCircleArea(-10)
	//fmt.Println(area)

	test002()
}

返回异常

返回异常类型为error类型

package main

import (
	"errors"
	"fmt"
)

// 自定义返回异常
func getCircleArea(x float32) (area float32, err error) {
	if x < 0 {
		// 初始化一个错误信息
		// err = errors.New("半径不能为空")
		err = fmt.Errorf("%s", "半径不能为空")
		return
	}
	area = 3.14 * x * x
	return
}

func main() {
	area, err := getCircleArea(-10)
	// 根据返回的错误信息处理异常
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(area)
}
posted @ 2020-03-17 11:54  ZhiChao&  阅读(624)  评论(0编辑  收藏  举报