日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Golang之错误处理

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

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

1、errors包:

//只附加新的信息 func?WithMessage(err?error,?message?string)?error 如: if err != nil {errors.WithMessage(err, "could not read config") }//只附加調用堆棧信息 func?WithStack(err?error)?error//同時附加堆棧和信息 func?Wrap(err?error,?message?string)?error 如: if err != nil {return errors.Wrap(err, "open failed") }// 返回包裝錯誤對應的最原始錯誤 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、責任鏈迭代變換

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、

總結

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

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