0
点赞
收藏
分享

微信扫一扫

go 语言学习笔记(14)——异常处理

J简文 2022-02-06 阅读 79

文章目录

go 语言学习笔记(14)——异常处理

error(不会导致程序崩溃)

创建一个错误(error)

package main

import (
	"errors"//导入包
	"fmt"
)

func main() {
	//创建一个错误
	err1 := errors.New("this is normal err1")
	fmt.Println(err1)
}

error接口应用

package main

import (
	"errors"
	"fmt"
)

func div(a, b int) (result int, err error) {
	err = nil
	if b == 0 {
		err = errors.New("分母不能为0")
	} else {
		result = a / b
	}
	return
}

func main() {
	result, err := div(20, 2)
	if err == nil {
		fmt.Println(result)
	} else {
		fmt.Println(err)
	}
	result, err = div(20, 0)
	if err == nil {
		fmt.Println(result)
	} else {
		fmt.Println(err)
	}
}
/*
10
分母不能为0
*/

panic(错误导致程序崩溃)

遇到不可恢复的错误状态的时候, (数组越界, 空指针引用……)会引起panic异常
不应通过调用panic函数来报告普通的错误,把他作为报告错误的一种方式。
发生panic异常是, 程序会中断运行,立刻执行goroutine。程序崩溃并输出日志信息。

显示调用panic

正常程序

package main

import (
	"fmt"
)

func funch() {
	fmt.Println("hhh")
}
func funcx() {
	fmt.Println("xxx")
}
func funcw() {
	fmt.Println("www")
}

func main() {
	funch()
	funcx()
	funcw()
}
/*
hhh
xxx
www
*/

调用panic函数

package main

import (
	"fmt"
)

func funch() {
	fmt.Println("hhh")
}
func funcx() {
	//调用panic 函数, 导致程序崩溃
	panic("this is a panic test")
	//fmt.Println("xxx")
}
func funcw() {
	fmt.Println("www")
}

func main() {
	funch()
	funcx()
	funcw()
}
/*
hhh
panic: this is a panic test
*/

数组越界

package main

import (
	"fmt"
)

func funch() {
	fmt.Println("hhh")
}
func funcx(x int) {
	var all [10]int
	all[x] = 10
}
func funcw() {
	fmt.Println("www")
}

func main() {
	funch()
	funcx(20)
	funcw()
}
/*
hhh
panic: runtime error: index out of range [20] with length 10
*/

recover(错误导致程序崩溃,recover恢复程序)

package main

import (
	"fmt"
)

func funch() {
	fmt.Println("hhh")
}
func funcx(x int) {
	//使用匿名函数
	defer func() {
		if err := recover(); err != nil {//err是recover的报错信息
			fmt.Println(err)
		}
	}() //调用
	var all [10]int
	all[x] = 10
	fmt.Println("xxx")
}
func funcw() {
	fmt.Println("www")
}

func main() {
	funch()
	funcx(20)
	funcx(2)
	funcw()
}
/*
hhh
runtime error: index out of range [20] with length 10
xxx
www
*/


举报

相关推荐

0 条评论