日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

go mysql recover_golang用panic和recover做业务流程中断的尝试

發布時間:2023/12/1 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 go mysql recover_golang用panic和recover做业务流程中断的尝试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

隨著使用golang越來越頻繁,發現golang有一個地方非常不方便,就是在錯誤處理方面。先來看看golang中通常的錯誤處理方法:

通常的error處理

package main

import (

"errors"

"fmt"

)

func a() (err error) {

err = errors.New("錯誤")

return

}

func main() {

err := a()

if err != nil {

fmt.Println(err)

}

}

函數在返回的時候增加error類型的返回值,如果有錯誤則賦值給err,在調用函數處對err進行判斷,如果不為nil則處理錯誤。這種方式在嵌套的層少的時候還好辦,要是嵌套的層多了那就要一級一級的返回err,顯然會很麻煩。如下面的代碼:

package main

import (

"errors"

"fmt"

)

func a() (err error) {

err = b()

if err != nil {

return

}

err = c()

if err != nil {

return

}

err = errors.New("a內錯誤")

return

}

func b() (err error) {

err = errors.New("b內錯誤")

return

}

func c() (err error) {

err = errors.New("c內錯誤")

return

}

func main() {

err := a()

if err != nil {

fmt.Println(err)

}

}

a函數內調用了b和c函數,調用后都要進行err != nil的判斷,如果再來個d方法,e方法,那豈不是非常麻煩。在實際開發的時候,這種多層嵌套也經常存在,比如用戶注冊功能就要判斷很多東西:表單驗證是否OK;用戶是否已經存在;數據插入是否OK等等。

用panic的嘗試

于是我就想有沒什么辦法更加方便,至少不用調用每個函數都判斷下err!=nil,這樣就可以省掉三行代碼。了解到golang中的panic方法可以直接中斷流程,感覺到沿著這個應該能找到解決方法。了解了下panic的詳細使用,其實也很簡單,就是panic一下,如果需要捕獲這個panic的錯誤,就在外圍的方法事先聲明recover方法??聪麓a:

package main

import (

"log"

)

func main() {

defer func() {

if r := recover(); r != nil {

log.Printf("Runtime error caught: %v", r)

}

}()

a()

}

func a() {

panic("a內錯誤")

}

a函數內拋出了錯誤,被外圍事先defer的函數recover到,接著就能對錯誤進行處理了。用這樣的方式來改造上面用err處理的代碼看看。

package main

import (

"log"

)

func a() {

b()

c()

panic("a內錯誤")

return

}

func b() {

panic("b內錯誤")

}

func c() (err error) {

panic("c內錯誤")

}

func main() {

defer func() {

if r := recover(); r != nil {

log.Printf("Runtime error caught: %v", r)

}

}()

a()

}

可以看到整個代碼都簡潔了很多,當然這里的代碼比較簡單可能看不出什么太大效果,在業務較為繁雜、經常要做各種校驗的時候就可以顯現出簡潔了。

在開發api接口項目的時候,我會封裝好recover的方法用來處理內部返回的錯誤信息,然后統一輸出到客戶端,感覺便捷很多。

總結

以上是生活随笔為你收集整理的go mysql recover_golang用panic和recover做业务流程中断的尝试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。