FreezeJ' Blog

Go处理不同异常

2022-03-15

使用switch case语句,匹配不同异常实现不同处理。

package main

import (
	"fmt"
	"time"
)

type normalError struct {
	msg string
}

func (n normalError) Error() string {
	return n.msg
}

type specialError struct {
	msg    string
	date   string
	detail string
}

func (s specialError) Error() string {
	return s.detail
}

func count(num int) (int, error) {
	if num <= 0 {
		return 0, normalError{msg: "输入数字小于等于0,请重新输入!"}
	} else if num > 999 {
		return 0, specialError{
			msg:    "输入数字大于999",
			date:   time.Now().Format("2006-01-02 14:04:15"),
			detail: fmt.Sprintf("你输入的数字为%d,大于最大值999", num),
		}
	} else {
		return num + 1, nil
	}
}

func loopCount() {
	var num int
	fmt.Print("请输入整数(0 < num < 999):")
	// 处理输入异常
	_, err := fmt.Scan(&num)
	switch err.(type) {
	case nil:
		// 处理函数异常
		result, err := count(num)
		switch err := err.(type) {
		case nil:
			fmt.Println("没有异常")
			fmt.Println("结果为:", result)
		case specialError:
			fmt.Println("特殊异常")
			fmt.Printf("错误时间:%s,错误详情:%s\n", err.date, err.detail)
		case normalError:
			fmt.Println("普通异常")
			fmt.Println(err.msg)
		default:
			fmt.Println("未知异常")
			fmt.Println(err)
		}
	default:
		fmt.Println(err)
	}

}

func main() {
	for {
		loopCount()
	}
}

输出:

请输入整数(0 < num < 999):-10
普通异常
输入数字小于等于0,请重新输入!
请输入整数(0 < num < 999):0
普通异常
输入数字小于等于0,请重新输入!
请输入整数(0 < num < 999):10
结果为: 11
请输入整数(0 < num < 999):1000
特殊异常
错误时间:2022-03-15 317:17:14,错误详情:你输入的数字为1000,大于最大值999
标签: GO
使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏