教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 Golang - 访问数据库报错后程序继续运行

Golang - 访问数据库报错后程序继续运行

发布时间:2022-01-28   编辑:jiaochengji.com
教程集为您提供Golang - 访问数据库报错后程序继续运行等资源,欢迎您收藏本站,我们将为您提供最新的Golang - 访问数据库报错后程序继续运行资源

 

<h2>1、问题缘由</h2>

在学习golang的时候,发现panic挺好用,但是有一个问题,比如执行update数据库,会报错faminly字段不存在,然后golang主程序直接退出了,没有找到类似try catch exception的方式,让我不得其解。后来网上请教golang高手,得知问题出在这里:Golang处理异常是用error返回的方式,然后调用方根据error的值走不同的处理逻辑。但是,如果程序触发其他的严重异常,比如说数组越界,程序就要直接崩溃。关于这种问题,可以考虑使用defer、panic、recover联合使用来解决

 

<h2>2、关于Defer、Panic、Recover</h2>


Defer
Defer语句将一个函数放入一个列表(用栈表示其实更准确)中,该列表的函数在环绕defer的函数返回时会被执行。defer通常用于简化函数的各种各样清理动作,例如关闭文件,解锁等等的释放资源的动作。
Panic
Panic是内建的停止控制流的函数。相当于其他编程语言的抛异常操作。当函数F调用了panic,F的执行会被停止,在F中panic前面定义的defer操作都会被执行,然后F函数返回。对于调用者来说,调用F的行为就像调用panic(如果F函数内部没有把panic recover掉)。如果都没有捕获该panic,相当于一层层panic,程序将会crash。panic可以直接调用,也可以是程序运行时错误导致,例如数组越界。

Recover
Recover是一个从panic恢复的内建函数。Recover只有在defer的函数里面才能发挥真正的作用。如果是正常的情况(没有发生panic),调用recover将会返回nil并且没有任何影响。如果当前的goroutine panic了,recover的调用将会捕获到panic的值,并且恢复正常执行。

 

<h2>3、问题解决</h2> <pre>一个专门处理异常错误的方法: func check_eorr(err error,exesql string){ defer func() { if r := recover(); r != nil { fmt.Printf("get error infomation:%s\n", r) } }() if err != nil { fmt.Println("query or exec error:",exesql) panic(err) } } </pre>

 

使用的时候这样用:

<pre>func insert_data(){ age:=20 exesql:="SELECT name FROM users WHERE age= '" age "'" rows, err := db.Query(exesql) // 调用错误处理方法check_error check_eorr(err,exesql) } </pre>

 

到此这篇关于“Golang - 访问数据库报错后程序继续运行”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
Golang - 访问数据库报错后程序继续运行
使用pprof进行golang程序内存分析
golang 并发访问map遇到的问题
Ubuntu安装指定版本mongodb使用及卸载
从Deadlock报错理解Go channel机制(一)
recover 没有捕获异常_GO语言异常处理机制panic和recover分析
php500错误
golang异常机制
Go基础学习记录 - 编写Web应用程序 - 添加编辑和保存功能(二)
开发模式与产品模式下的PHP报错处理详解

[关闭]
~ ~