Go语言入门10(异常处理)

这篇具有很好参考价值的文章主要介绍了Go语言入门10(异常处理)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

异常处理

panic 异常处理

​ 如果出现了panic异常,那么会停止当前函数的运行,然后会找recover()方法,如果没有的话,就会报错退出程序,如果有就会执行recover的方法体中的方法

​ 我们可以使用defer延迟处理函数来捕获panic异常,用recover()来从错误场景中恢复,必须的在defer修饰的方法中使用,不然不生效,panic抛出异常,defer具备延迟处理功能,所以最后这种兜底的活只能defer来做

// 定义一个带有panic异常的方法
func Test01(tmp int) string {
	fmt.Println("This is a test!")
	// 如果传入的参数是负数,那么就会抛出panic异常    
	if tmp <= 0 {
		panic("不能传递非正数")
	}
	return "这是一个正数"
}

func main() {
    // 使用defer + recover来兜底
	defer func() {
		err := recover()
		if err != nil {
			fmt.Println(err)
		}
	}()
	fmt.Println(Test01(-1))
    // 由于panic异常会停止当前函数运行,所以下面的输出不会被执行
	fmt.Println("异常处理之后")
}

errors 异常处理

​ Go语言有一个预先定义的 error 接口类型,同时也提供了一个包 errors,包中有一个 errorString 结构体实现了 error 接口 。任何时候当你需要一个新的错误类型,都可以用 errors 包的errors.New函数接收合适的错误信息来创建

​ error异常不会中断程序运行,所以不需要defer 和 recover 兜底文章来源地址https://www.toymoban.com/news/detail-422497.html

// 返回值要声明error类型
func Test02(tmp int) (res string, err error) {
	if tmp > 0 {
        // 如果正常输出,也需要返回nil
		return "这是正数", nil
	} else {
        // 使用函数创建error异常
		err := errors.New("不能传递非正数!")
		return "", err
	}
}

func main() {
	res, err := Test02(34)
	if err != nil {
		fmt.Println("出现错误:", err)
	} else {
		fmt.Println("传参正确:", res)
	}
    // error异常不会中断运行,下面的输出会被执行
    fmt.Println("异常处理之后")
}

自定义异常

// 新建一个异常结构体,用来存储参数
type customException struct {
	contain string
}

// 实现Error接口
func (tmp *customException) Error() string {
	err := fmt.Sprintf("这是一个自定义错误: %s", tmp.contain)
	return err
}

func Test03(tmp int) (res string, err error) {
	if tmp < 0 {
		panic(&customException{"不能传入负数"})
	} else if tmp == 0 {
		err = &customException{"不能传入0"}
		return
	} else {
		return "这是一个正数", nil
	}
}

func main() {
	defer func() {
		err := recover()
		if err != nil {
			fmt.Println(err)
		}
	}()
	res, err := Test03(-1)
	if err != nil {
		fmt.Println("出现错误:", err)
	} else {
		fmt.Println("传参正确:", res)
	}
	fmt.Println("异常处理之后")
}

到了这里,关于Go语言入门10(异常处理)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Go语言入门书籍推荐(10本)

    1. 《Go 语言编程》 《Go 语言编程》是由图灵教育编写的一本入门教程,全书共分为 18 章,包括 Go 语言基础、流程控制、函数、数组切片、指针、结构体和面向对象编程等内容。通过这本书,读者可以系统地了解 Go 语言的基础知识,掌握基本的编程技能。 2. 《Go 语言实战》

    2024年02月12日
    浏览(24)
  • 100天精通Golang(基础入门篇)——第23天:错误处理的艺术: Go语言实战指南

    🌷🍁 博主猫头虎🐅🐾 带您进入 Golang 语言的新世界✨✨🍁 🦄 博客首页 ——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍专栏》 🐾 学会IDEA常用操作,工作效率翻倍~💐 🌊 《100天精通

    2024年02月07日
    浏览(47)
  • Go的异常处理

    在Go中不支持传统的try…catch…finally这种处理,在Go中引入了defer、panic、recover处理方式,通过抛出一个panic异常,然后在defer中通过recover捕获这个异常,最后正常处理。 Go程序中,也支持自定义异常处理,使用errors.New和panic内置函数。其中: errors.New(“错误说明”),返回一个

    2024年02月21日
    浏览(29)
  • go中异常处理流程

    在 Go 语言中, panic 、 recover 和 defer 是用于处理异常情况的。它们通常一起使用来实现对程序错误的处理和恢复。 defer 用于在函数返回之前执行一段代码。被 defer 修饰的语句或函数会在包含 defer 的函数执行完毕后执行。 defer 常用于资源清理、释放锁、关闭文件等操作

    2024年02月05日
    浏览(35)
  • Go中的异常处理(基础)

    主要掌握 一下几个方面: 掌握error接口 掌握defer延迟 掌握panic及recover error是指程序中出现不正常的情况,从而导致程序无法正常运行; go中为错误的类型提供了简单的错误处理机制 go中error的源码: 可以看到接口中定义了Error方法,我们可以实现这个方法已实现error接口;

    2024年02月12日
    浏览(33)
  • Go中Panic and Recover

    什么是Panic? 在 Go 程序中处理异常情况的惯用方法是使用errors.。errors足以应对程序中出现的大多数异常情况。 **但有些情况下,程序在出现异常情况后无法继续执行。在这种情况下,我们使用 panic 提前终止程序。当函数遇到恐慌时,其执行将停止,所有延迟的函数都会被执

    2024年02月06日
    浏览(27)
  • Go语言入门记录:从channel的池应用、sync的Pool、benchmark、反射reflect、json处理、http、性能分析和一些编程习惯

    channel的一对一会阻塞,添加buffer不会阻塞。 buffered Channel实现对象池。 sync.Pool 的介绍。 获取时先去私有对象中获取,如果不存在就在相同Processor中的共享池中获取,如果还没有,则去其他Processor中去获取。 存放时,如果私有对象不存在,就放在私有对象中,如果存在就放在

    2024年02月10日
    浏览(33)
  • 从零学习python - 10程序中的异常处理

    * try: ... except: ... finally: ...  使用一个计算器方法测试一下 在 try: 中的代码块如果出现异常,会根据我们下方抛出的不同异常进行捕获(ValueError - ZeroDivisionError - Exception),并且进行不同的异常处理. * raise

    2023年04月09日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包