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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Golang之错误处理

發(fā)布時間:2025/3/16 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Golang之错误处理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、錯誤只在邏輯的最外層處理一次,底層只返回錯誤。
2、底層除了返回錯誤外,要對原始錯誤進(jìn)行包裝,增加錯誤信息、調(diào)用棧等這些有利于排查的上下文信息。

1、errors包:

//只附加新的信息 func?WithMessage(err?error,?message?string)?error 如: if err != nil {errors.WithMessage(err, "could not read config") }//只附加調(diào)用堆棧信息 func?WithStack(err?error)?error//同時附加堆棧和信息 func?Wrap(err?error,?message?string)?error 如: if err != nil {return errors.Wrap(err, "open failed") }// 返回包裝錯誤對應(yīng)的最原始錯誤 errors.Cause(err) 如: fmt.Printf("original error: %T %v\n", errors.Cause(err), errors.Cause(err))

2、Err集中判斷:

初始: // 開車去商店 shopper, err := shopper.Drive(FuelNeededToGetToStore) if nil != err {log.Fatalf("could not complete shopping: %s", err) } // 買雞蛋 shopper, err = shopper.BuyEggs(EggsRequired) if nil != err {log.Fatalf("could not complete shopping: %s", err) } // 買完雞蛋開車回家 shopper, err = shopper.Drive(FuelNeededToGetHome) if nil != err {log.Fatalf("could not complete shopping: %s", err) }只打印不返回的err集中判斷 func main(){shopper, err := shopper.Drive(FuelNeededToGetToStore)FatalIfErrNotNil(err)shopper, err = shopper.BuyEggs(EggsRequired)FatalIfErrNotNil(err)shopper, err = shopper.Drive(FuelNeededToGetHome)FatalIfErrNotNil(err) } func FatalIfErrNotNil(err error) {if nil != err {log.Fatalf("could not complete shopping: %s", err)} }

3、責(zé)任鏈迭代變換

func main(){driveToStore := Flavorize(Drive, FuelNeededToGetToStore)buyEggs := Flavorize(BuyEggs, EggsRequired)driveHome := Flavorize(Drive, FuelNeededToGetHome)shopper, err := ProcessSteps(shopper,driveToStore,buyEggs,driveHome,)if nil != err {log.Fatalf("could not complete shopping: %s", err)} }func ProcessSteps(s Shopper, steps ...func(Shopper) (Shopper, error)) (Shopper, error) {for _, step := range steps {var err error s, err = step(s)if nil != err {return s, err}}return s, nil }func Flavorize(f func(Shopper, int) (Shopper, error), arg int) func(Shopper) (Shopper, error) {return func(s Shopper) (Shopper, error) {return f(s, arg)} }

4、使用defer消除冗余

func writeConfig(data interface{}) (err error) {defer func() {if err != nil {err = errors.WithMessage(err, "writing configuration")}}()b, err := json.Marshal(data)if err != nil {return err}if err = ioutil.WriteFile("config.json", b, 0644); err != nil {return err}return }

5、

總結(jié)

以上是生活随笔為你收集整理的Golang之错误处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。