日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

要么返回錯誤值,要么輸出日志,別兩樣都做

來源: 責(zé)編: 時間:2024-04-15 18:12:13 220觀看
導(dǎo)讀1. 緣起這周,一個產(chǎn)品團(tuán)隊內(nèi)進(jìn)行Go代碼評審時,得到了一個結(jié)論:所有的if err != nil的地方都應(yīng)該輸出錯誤日志。然而,這種做法并不是最佳實踐,它存在一些問題。首先,打印過多的錯誤日志會導(dǎo)致日志文件變得冗長和難以閱讀。其

1. 緣起

這周,一個產(chǎn)品團(tuán)隊內(nèi)進(jìn)行Go代碼評審時,得到了一個結(jié)論:所有的if err != nil的地方都應(yīng)該輸出錯誤日志。然而,這種做法并不是最佳實踐,它存在一些問題。0Lv28資訊網(wǎng)——每日最新資訊28at.com

首先,打印過多的錯誤日志會導(dǎo)致日志文件變得冗長和難以閱讀。其次,重復(fù)的錯誤信息會增加冗余。此外,每一層都打印錯誤日志,一旦錯誤信息設(shè)計不當(dāng),可能會導(dǎo)致上下文信息的丟失。0Lv28資訊網(wǎng)——每日最新資訊28at.com

讓我們來看一個示例,說明為什么同時輸出錯誤日志和返回錯誤值會導(dǎo)致問題。假設(shè)我們有一個五層的Go函數(shù)調(diào)用棧,其中最底層的函數(shù)level4Function出現(xiàn)了一個錯誤:0Lv28資訊網(wǎng)——每日最新資訊28at.com

package mainimport ( "fmt" "log")func main() { if err := topFunction(); err != nil {  log.Printf("Error: %v", err) }}func topFunction() error { err := level1Function() if err != nil {  log.Printf("topFunction: %v", err)  return err } return nil}func level1Function() error { err := level2Function() if err != nil {  log.Printf("level1Function: %v", err)  return err } return nil}func level2Function() error { err := level3Function() if err != nil {  log.Printf("level2Function: %v", err)  return err } return nil}func level3Function() error { err := level4Function() if err != nil {  log.Printf("level3Function: %v", err)  return err } return nil}func level4Function() error { err := fmt.Errorf("something went wrong") log.Printf("level4Function: %v", err) return err}

在這個示例中,我們在每個函數(shù)中都輸出錯誤日志并返回錯誤值。我們運(yùn)行一下這個程序:0Lv28資訊網(wǎng)——每日最新資訊28at.com

$go run main.go 2024/04/14 23:10:05 level4Function: something went wrong2024/04/14 23:10:05 level3Function: something went wrong2024/04/14 23:10:05 level2Function: something went wrong2024/04/14 23:10:05 level1Function: something went wrong2024/04/14 23:10:05 topFunction: something went wrong2024/04/14 23:10:05 Error: something went wrong

當(dāng)我們運(yùn)行程序時,日志文件會出現(xiàn)重復(fù)的錯誤信息,并且上下文信息不易于進(jìn)行鏈?zhǔn)阶粉櫍驗槊總€函數(shù)只打印了特定錯誤的信息,而沒有提供之前錯誤的上下文。0Lv28資訊網(wǎng)——每日最新資訊28at.com

2. 好的實踐技巧

為了解決上述問題,我們需要采用一種更好的實踐方法。面向調(diào)用層次較深的函數(shù)調(diào)用棧,我們應(yīng)該只在最頂層的函數(shù)中輸出錯誤日志,而在下層函數(shù)中返回錯誤值。但是,我們需要精心構(gòu)造錯誤值,以形成基于wrapped error的錯誤鏈。0Lv28資訊網(wǎng)——每日最新資訊28at.com

讓我們修改示例代碼,按照最佳實踐進(jìn)行錯誤處理:0Lv28資訊網(wǎng)——每日最新資訊28at.com

package mainimport ( "fmt" "log")func main() { if err := topFunction(); err != nil {  log.Printf("Error: %v", err) }}func topFunction() error { err := level1Function() if err != nil {  return fmt.Errorf("topFunction: %w", err) } return nil}func level1Function() error { err := level2Function() if err != nil {  return fmt.Errorf("level1Function: %w", err) } return nil}func level2Function() error { err := level3Function() if err != nil {  return fmt.Errorf("level2Function: %w", err) } return nil}func level3Function() error { err := level4Function() if err != nil {  return fmt.Errorf("level3Function: %w", err) } return nil}func level4Function() error { err := fmt.Errorf("something went wrong") return fmt.Errorf("level4Function: %w", err)}

在這個修改后的示例中,我們在每個函數(shù)中使用fmt.Errorf+%w將錯誤包裝為一個wrapped error,并將前一層的錯誤作為參數(shù)傳遞。通過這種方式,我們構(gòu)建了一個錯誤鏈,其中每個錯誤都包含了之前發(fā)生的錯誤上下文。在最頂層的main函數(shù)中,我們使用日志庫輸出錯誤日志,下面是示例程序的運(yùn)行結(jié)果:0Lv28資訊網(wǎng)——每日最新資訊28at.com

2024/04/14 23:12:16 Error: topFunction: level1Function: level2Function: level3Function: level4Function: something went wrong

我們看到:通過這種方法,我們避免了重復(fù)的錯誤日志,并保留了錯誤的上下文信息,快速定位了根因。當(dāng)運(yùn)行修改后的程序時,我們會看到日志文件中只打印了完整的錯誤鏈,而不是重復(fù)的錯誤信息。通過調(diào)用鏈和精心設(shè)計的錯誤上下文,我們還可以看到函數(shù)調(diào)用鏈,這使得錯誤的調(diào)試和處理變得更加方便和可靠。0Lv28資訊網(wǎng)——每日最新資訊28at.com

3. 小結(jié)

在前面的示例中,我們展示了同時輸出錯誤日志和返回錯誤值的問題,并介紹了如何使用wrapped error來構(gòu)建錯誤鏈。通過合理地處理錯誤,我們可以提高代碼的可讀性和可維護(hù)性,同時也有助于快速定位和解決問題。0Lv28資訊網(wǎng)——每日最新資訊28at.com

總之,在編寫Go代碼時,請記住要么返回錯誤值,要么輸出日志,不要兩者都做。通過合理地處理錯誤,我們可以編寫出更可靠、更易于調(diào)試的代碼。0Lv28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-83619-0.html要么返回錯誤值,要么輸出日志,別兩樣都做

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 從 React 新官網(wǎng)學(xué)到的一個優(yōu)秀實踐妙招

下一篇: 不要在循環(huán)await啦,異步操作的六個最佳實踐!

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国产精品视频男人的天堂| 欧美激情一区二区三区在线视频| 一区二区三区视频在线看| 亚洲免费高清| 亚洲综合色自拍一区| 欧美综合国产精品久久丁香| 久久综合给合久久狠狠色| 欧美极品一区二区三区| 欧美视频一区二区在线观看| 国产精品一级在线| 在线观看欧美日本| 中日韩视频在线观看| 久久xxxx精品视频| 欧美福利电影网| 国产精品久久久久久影院8一贰佰| 国产亚洲一区精品| 亚洲美女电影在线| 欧美亚洲综合网| 欧美成人精品不卡视频在线观看| 欧美视频免费看| 伊人久久久大香线蕉综合直播| av不卡在线| 久久久久一区| 欧美午夜不卡在线观看免费 | 亚洲图色在线| 久久免费视频这里只有精品| 欧美日韩999| 韩曰欧美视频免费观看| 正在播放欧美一区| 蜜乳av另类精品一区二区| 国产精品区一区| 亚洲精品久久久久久一区二区| 欧美影院在线播放| 欧美日韩在线观看视频| 亚洲第一黄色| 久久精品欧美日韩精品| 欧美色另类天堂2015| 伊伊综合在线| 欧美在线免费观看视频| 欧美日韩在线高清| 亚洲国产三级在线| 久久精品亚洲一区二区三区浴池| 欧美日韩综合不卡| 亚洲激情一区二区| 久久青草欧美一区二区三区| 国产精品久久夜| 亚洲精品综合久久中文字幕| 久久女同互慰一区二区三区| 国产精品日日摸夜夜添夜夜av | 久久aⅴ国产紧身牛仔裤| 欧美日本一区二区高清播放视频| 激情综合激情| 欧美一区午夜精品| 国产精品久久久久免费a∨大胸| 亚洲人在线视频| 久久人人97超碰国产公开结果| 国产伦精品一区二区三区免费迷| 一区二区精品国产| 欧美激情一区二区三区全黄| 在线成人激情| 久久久久久久久久码影片| 国产欧美一区二区三区久久人妖 | 欧美精品 日韩| 亚洲国产精品成人va在线观看| 久久国产精品久久精品国产| 国产精品久久国产精品99gif| 日韩一区二区久久| 欧美乱人伦中文字幕在线| 亚洲人成精品久久久久| 欧美福利网址| 亚洲黄色片网站| 欧美黄色一区| 亚洲精品乱码久久久久久蜜桃麻豆 | 亚洲砖区区免费| 国产精品国产a级| 国产精品日韩欧美| 亚洲欧美精品一区| 国产精品日韩欧美一区二区| 亚洲欧美日韩在线播放| 国产精品久久久久久久电影| 亚洲一区三区在线观看| 国产精品一区二区三区乱码| 亚洲免费在线视频| 国产精品一区二区三区四区| 亚洲欧美一区在线| 国产欧美日韩一区二区三区在线 | 久久精品最新地址| 国内一区二区三区| 久久综合给合| 亚洲国产欧美一区| 欧美黑人国产人伦爽爽爽| 亚洲毛片在线观看| 欧美日韩国产一区精品一区 | 久久精品免费看| 激情欧美一区二区三区| 久久五月天婷婷| 亚洲激情成人| 欧美日韩精品伦理作品在线免费观看 | 国产伦精品免费视频| 欧美在线日韩| 1024亚洲| 欧美人在线观看| 亚洲视频一二区| 国产精品亚洲片夜色在线| 欧美在线一二三| 亚洲国产激情| 欧美色图一区二区三区| 午夜精品久久久久| 一区二区视频欧美| 欧美日韩国产精品| 性高湖久久久久久久久| 在线电影国产精品| 欧美乱大交xxxxx| 亚洲欧美日韩精品久久久| 国内自拍一区| 欧美精品尤物在线| 午夜精品福利视频| 1000精品久久久久久久久| 欧美日韩成人| 欧美在线观看视频一区二区三区 | 日韩小视频在线观看专区| 国产精品剧情在线亚洲| 久久精品国产综合| 国产精品高潮粉嫩av| 欧美在线free| 亚洲人成高清| 国产伦精品一区| 免费成人毛片| 亚洲一级在线观看| 韩国成人福利片在线播放| 欧美日韩精品福利| 久久精品一二三区| 一本色道久久加勒比精品| 国内精品久久久久久影视8| 欧美女同视频| 久久精品一区| 中文在线资源观看网站视频免费不卡| 国产亚洲精品v| 欧美视频一区在线| 久久综合图片| 午夜视频久久久| 99在线|亚洲一区二区| 韩国av一区| 国产精品久久久久秋霞鲁丝| 免费一级欧美片在线播放| 午夜视频久久久| 一区二区三区日韩欧美| 尤物网精品视频| 国产免费一区二区三区香蕉精| 欧美成人蜜桃| 久久国产精品色婷婷| 一区二区三区精品| 亚洲大胆女人| 国产午夜精品麻豆| 国产精品成人观看视频免费| 欧美99在线视频观看| 欧美中文在线免费| 中文日韩电影网站| 亚洲人www| 精品福利av| 国产日韩在线看片| 国产精品白丝jk黑袜喷水| 欧美国产日韩一区二区三区| 久久久久国产精品人| 亚洲欧美99| 一区二区三区免费网站| 亚洲高清二区| 韩国一区电影| 国产农村妇女精品一二区| 欧美日韩无遮挡| 欧美精品激情blacked18| 美国成人直播| 久久久久久穴| 久久精品欧洲| 性8sex亚洲区入口| 午夜精品久久久久久久99樱桃| 中文精品在线| 亚洲精品一区二区三区99| 在线免费不卡视频| 99re6热在线精品视频播放速度 | 136国产福利精品导航网址应用| 久久爱另类一区二区小说| 黑人一区二区三区四区五区| 性做久久久久久免费观看欧美| 国产一区二区三区高清在线观看 | 欧美成人情趣视频| 99国产精品自拍| 国产精品人成在线观看免费| 国产亚洲福利社区一区| 久久精品99| 99re热这里只有精品视频| 影音先锋亚洲一区| 欧美美女日韩| 亚洲一区二区免费| 国产亚洲一区二区在线观看| 亚洲一区亚洲| 永久域名在线精品| 国产美女精品| 亚洲小说春色综合另类电影| 国产精品亚洲а∨天堂免在线| 欧美激情精品久久久| 欧美成人精品一区二区| 久久久久国产免费免费| 一区二区国产日产|