精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

不想Go 錯誤處理太臃腫,可以參考這個代碼設計

開發 前端
今天給大家分享了一些在讓Go代碼的錯誤處理更優雅上,我學到和?想到的一些東西。其實大家可以發現,我們是把多個 if err != nil 分散到了多個方法里,這樣代碼最起碼從感官上看起來比在一個方法里寫七八個錯誤判斷更好一點。

最近寫了個程序,因為是急活(貌似沒有不急的...),所以這個程序又是我東拷一段,西粘一塊拼出來的。代碼寫完了后,感覺這代碼屎一樣,都快把自己看哭了。真的是在心里邊寫別罵,先是罵以前做這個項目的人蠢,項目搞的跟屎一樣,后來代碼跑起來了,順利交工后,變成了罵我自己蠢,這么寫又不是不能用!

圖片

又不是不能用

不過在這個過程中,先不提項目里的業務邏輯、接口設計合不合理的事兒,這個我覺得在時間緊,加上人員更迭快的時候,正常人都會能粘就粘,不行了就再包一層,別改出線上問題了就行。有一點我把自己蠢哭的是,Go 的這個錯誤處理也太TM蠢了,一個程序我寫了七八個錯誤判斷,我給你們用偽代碼描述一下:

err, file :=  接收傳文件(文件)
if err != nil {
記日志
返回錯誤碼相應
}

err, fh := 打開上傳文件(file)
if err != nil {
記日志
返回錯誤碼相應
}

err, data := 把文件里的行記錄解析/轉換一下(row)
if err != nil {
記日志
返回錯誤碼相應
}

err, data3 := 調一下第三方接口拿數據
if err != nil {
記日志
返回錯誤碼相應
}

err, data2 := 調一下內部其他服務拿數據
if err != nil {
記日志
返回錯誤碼相應
}

err := 寫庫
if err != nil {
記日志
返回錯誤碼相應
}

上面這個例子毫不夸張,我相信各位在自己的項目里一定見過,如果你是做業務開發的會更常見。

這里有人肯定會問,Go的錯誤處理就這樣你難道第一天見嗎,還能被蠢哭。誒,這不是降本提效后人員少了一半,我們這幫級別沒混上去的虛線Leader,這不又開始自己寫代碼了嘛,以前蠢又蠢不到自己。再加上以前的系統、項目分層、服務隔離整的還湊活,不會像上面這樣,在控制層調這么多業務對象,把蠢瓜代碼集中在了一起…… 官感馬上不一樣了。

于是乎我就在思考,有沒有什么設計模式什么的,能把這些東西隱藏下去,應該有吧,沒有什么是包一層代碼解決不了的吧,實在不行就包兩層……誒,咋一不小心把設計模式的精髓給說出來了。

Go 優雅處理錯誤的幾種方案

我這幾天在網上看了不少說,Go 錯誤處理的,但基本上都是說怎么自定義包裝 error 、傳遞error 之類的,講怎么在寫 Go 代碼時能更優雅更好看的文章比較少,寫的最好的是左耳朵耗子老師在自己博客里介紹的兩種方式。

一種是用函數式編程的 Closure 把相同的 if err !=nil 之類的代碼抽象出來重新定義一個函數,但是這種方式會導致新的問題--在每個函數里都需要引入內部函數和一個 error 變量,所以咱就不多說了,有興趣的可以去原博文查看。

這里直接介紹另外一種更好的,對項目侵入不是很大的方案給大家。在 Go 語言官方庫 bufio? 中 Scanner對象的錯處理的實現方式可以給我們一點啟發,它大概是這么實現的。

scanner := bufio.NewScanner(input)

for scanner.Scan() {
token := scanner.Text()
// process token
}

if err := scanner.Err(); err != nil {
// process the error
}

上面的代碼我們可以看到,scanner?在操作底層的I/O的時候,那個for-loop中沒有任何的 if err !=nil? 的情況,退出循環后有一個 scanner.Err() 的檢查。看來使用了結構體的方式。

我們來看一下 Scanner類型的定義:

type Scanner struct {
r io.Reader
...//其他字段省略
err error
}

這個類型內部持有一個error 在迭代執行 Scan 方法時,遇到錯誤后會往這個 error 中記錄錯誤。

func (s *Scanner) Scan() bool {
...// 其余代碼省略
for {
if err != nil {
s.setErr(err)
return false
}
}

func (s *Scanner) Err() error {
if s.err == io.EOF {
return nil
}
return s.err
}

所以我們可以參考這個思路繼續搞下去。比如來一個讀取業務對象的

圖片

上面這個示例相信大家很容易看懂,不過,其使用場景也就只能在對于同一個業務對象的不斷操作下可以簡化錯誤處理,對于多個業務對象的話,還是得需要各種 if err != nil的方式。

那有什么辦法呢,咱們之前說過一次:沒有什么是包一層代碼解決不了的吧,實在不行就包兩層。那么接下來我們再做一層包裝,以下是我對解決這個問題的一點點理解,會借鑒一點DDD中分層的概念解決這個事情。

更容易落地的方案

剛才那個例子的問題是只適合減少單個業務對象邏輯操作中的 if err != nill 判斷,那么針對這塊呢,咱們可以把涉及多個業務對象的操作放在一個應用服務里,把剛才在業務對象做的錯誤處理判斷拿到應用服務里,這樣業務對象里,比如Model之類的下層模塊里,就還能按照正常的流程寫代碼了,不用每個方法開頭都要先判斷一下。

這里提前說一下,在一些架構設計里會分應用服務和領域服務,這兩者的概念完全不一樣,應用服務是面向產品需求的用例實現的,負責業務用例流的任務協調,就是我們實現API時,往往會控制層調應用服務,多個不同的業務對象可以放到一個應用服務里。而領域服務是專一給一個領域的,這塊我就不多解釋了,DDD這些我也是看了幾本書,看過COLA框架的實現,還在似懂非懂的水平。

總之記住一點,通過應用服務可以協調多個業務對象執行任務,同時我們上面業務對象加的那些錯誤處理抽離到應用服務層里,讓業務對象更專注自己的職責。這樣的話,你的服務層代碼,可能就得變成了這樣

圖片

然后我們的控制層呢,調用應用服務層拿到結果,并且在這個時候判斷整個需求任務執行的過程中有沒有錯誤,有的話記錄錯誤,返回錯誤響應給客戶端。

圖片

Go 錯誤處理的基礎

之前分享過一篇文章??關于Go程序錯誤處理的一些建議??說的是我們應該怎么用好 Go 的error 接口,自定義錯誤,包裝整個錯誤鏈等相關的技能。跟本文的內容關聯起來看,可能會對錯誤處理有個更全局的理解,在這里也推薦給大家。

總結

今天給大家分享了一些在讓Go代碼的錯誤處理更優雅上,我學到和?想到的一些東西。其實大家可以發現,我們是把多個 if err != nil 分散到了多個方法里,這樣代碼最起碼從感官上看起來比在一個方法里寫七八個錯誤判斷更好一點。

責任編輯:武曉燕 來源: 網管叨bi叨
相關推薦

2025-01-21 08:02:03

2022-07-13 08:53:28

函數Go語言

2014-11-17 10:05:12

Go語言

2021-04-29 09:02:44

語言Go 處理

2024-03-14 09:35:54

Go 錯誤select代碼

2025-02-24 09:30:15

2023-12-26 22:05:53

并發代碼goroutines

2025-06-06 06:45:54

2021-09-13 07:53:31

Go錯誤處理

2025-03-31 00:29:44

2022-09-05 08:55:15

Go2提案語法

2025-06-30 09:49:11

2023-03-10 08:48:29

2025-09-05 01:55:00

Go并發錯誤項目

2024-03-27 08:18:02

Spring映射HTML

2021-09-27 15:33:48

Go 開發技術

2021-09-27 23:28:29

Go多協程并發

2020-12-17 06:25:05

Gopanic 模式

2023-10-26 15:49:53

Go日志

2021-09-27 10:04:03

Go程序處理
點贊
收藏

51CTO技術棧公眾號

91免费国产视频网站| 中文一区二区| 欧美va亚洲va香蕉在线| 国产一线二线三线女| 天天射天天色天天干| 首页国产欧美久久| 九九久久精品一区| 国产美女免费无遮挡| 国产麻豆精品| 高跟丝袜一区二区三区| 在线观看欧美亚洲| 亚洲人妻一区二区| 国产综合色产在线精品| 热99精品只有里视频精品| 亚洲熟女毛茸茸| 色先锋久久影院av| 欧美一级夜夜爽| 午夜dv内射一区二区| 色婷婷在线播放| 中文字幕+乱码+中文字幕一区| 51成人做爰www免费看网站| 成年人午夜视频| 91精品国产自产在线观看永久∴ | 亚洲欧美在线视频| 久久狠狠久久综合桃花| 亚洲高清在线观看视频| 蜜桃av一区二区三区| 69久久夜色精品国产7777| 欧美做爰爽爽爽爽爽爽| 欧美色网址大全| 亚洲精品在线视频| 黄色网址在线视频| 亚洲日本视频在线| 欧美一区日本一区韩国一区| 日本久久精品一区二区| 天堂√8在线中文| 亚洲国产综合91精品麻豆| 亚洲自拍偷拍二区| 丁香婷婷在线| 久久久久久久综合日本| 国产在线精品一区| 午夜精品久久久久久久96蜜桃 | 国产女主播喷水高潮网红在线| 亚洲日本视频在线| 日韩欧美一区二区免费| 久久婷婷中文字幕| 91精品亚洲一区在线观看| 91九色02白丝porn| 精品人妻一区二区三区四区在线 | 国产精品日韩一区| 黄色污污网站在线观看| 鲁大师影院一区二区三区| 51午夜精品视频| 亚洲伊人成人网| 国产深夜精品| 日韩av免费看| 亚洲国产精品无码久久久| 久久狠狠婷婷| 国产精品极品美女粉嫩高清在线| 日本熟妇一区二区三区| 久久婷婷激情| 国产精品天天狠天天看| 国产又黄又粗又猛又爽| 黑人巨大精品欧美黑白配亚洲| 成人国产精品久久久久久亚洲| 亚洲一区二区三区网站| 国产在线精品一区二区三区不卡 | 国产精品九九九九| 国产美女视频一区| 99电影在线观看| 天堂中文在线资源| 国产亚洲欧洲一区高清在线观看| 日韩欧美在线一区二区| 午夜小视频在线| 亚洲精品高清在线观看| 2018中文字幕第一页| 美女在线视频免费| 色婷婷av一区二区三区gif | 不卡的电视剧免费网站有什么| 国产亚洲福利社区| 国产高清视频在线观看| 亚洲欧美在线高清| 国产精品成人久久电影| 天堂av中文在线观看| 欧美在线观看一区| 制服下的诱惑暮生| 亚洲免费专区| 久久久久北条麻妃免费看| 久久精品国产亚洲AV无码麻豆 | 男人的天堂在线视频| 国产精品免费丝袜| 国产精品入口芒果| 成人国产精品入口免费视频| 日韩午夜电影在线观看| 久久人人妻人人人人妻性色av| 最新精品国偷自产在线| 超碰精品一区二区三区乱码| 国产一级一片免费播放| 老牛影视一区二区三区| 亚洲综合自拍一区| 欧美在线观看在线观看| 亚洲视频在线观看一区| 国产麻花豆剧传媒精品mv在线| 欧美亚洲黄色| 精品视频在线播放| 91成人福利视频| 日韩中文字幕麻豆| 国产精品免费一区二区三区| 99reav在线| 狠狠躁夜夜躁人人爽超碰91| 中文字幕第22页| 国产中文字幕一区二区三区| 欧美巨猛xxxx猛交黑人97人| 最近中文在线观看| 99精品视频在线免费观看| 正在播放91九色| www.日韩| 亚洲激情在线观看视频免费| 性欧美videos| 日本va欧美va欧美va精品| 国产自产精品| 蜜臀av国内免费精品久久久夜夜| 欧美日韩激情一区二区三区| 亚洲综合网在线观看| 伊人精品成人久久综合软件| 91久久综合亚洲鲁鲁五月天| 国产区av在线| 色偷偷久久一区二区三区| 99久久久无码国产精品性波多| 久久久久久美女精品| 国产精品狠色婷| 日本免费一区二区三区最新| 香蕉加勒比综合久久| 中文字幕在线视频一区二区| 日韩激情一区| 国产免费亚洲高清| av大片在线观看| 欧美伊人久久久久久久久影院 | 免费在线观看一级毛片| 午夜亚洲国产au精品一区二区| 欧美精品色视频| 999视频精品| 国产在线精品成人一区二区三区| 国产理论电影在线观看| 色香蕉久久蜜桃| 国产三级av在线播放| 视频一区二区三区在线| 日产国产精品精品a∨| 成人影院网站| 国产亚洲激情在线| 成人免费视频国产免费| 国产喷白浆一区二区三区| 国产免费人做人爱午夜视频| 国产精品片aa在线观看| 国产成人97精品免费看片| 国产在线资源| 欧美日韩mp4| 日本福利片在线观看| 国产精品综合网| 日韩精品久久一区二区| 成人免费直播在线| 欧美亚洲国产日韩2020| 国产美女视频一区二区三区| 欧美亚洲尤物久久| 国产又粗又硬又长又爽| 国产成人亚洲综合a∨婷婷| av在线免费观看国产| 一区中文字幕电影| 97在线视频一区| 国产色a在线| 日韩一区二区在线免费观看| 国产一国产二国产三| 久久综合给合久久狠狠狠97色69| 欧美午夜性生活| 午夜欧美在线| 国产精品一区二区你懂得| 中文字幕21页在线看| 中文字幕v亚洲ⅴv天堂| 99国产揄拍国产精品| 亚洲香肠在线观看| 国产毛片久久久久久久| 精彩视频一区二区| 欧美深夜福利视频| 日韩av在线播放网址| 99久久久精品免费观看国产| 欧产日产国产精品视频 | 色综合99久久久无码国产精品| 麻豆精品一区二区综合av| 亚洲爆乳无码精品aaa片蜜桃| 好吊妞国产欧美日韩免费观看网站 | 国产亚洲情侣一区二区无| 成人黄色免费短视频| 麻豆国产精品va在线观看不卡| 天堂中文在线观看视频| 在线观看91av| www.com国产| 亚洲美女视频在线| 成人在线一级片| 国产91精品在线观看| 成年人在线观看视频免费| 亚洲成人中文| 国产av不卡一区二区| 伊人久久大香线蕉| 成人在线看片| 国产在视频一区二区三区吞精| 国内精品久久久久影院优| 中文字幕在线观看日本| 亚洲精品久久久久久久久久久久 | 成人做爰免费视频免费看| 欧美激情一区二区三级高清视频 | 中文字幕一区二区三区视频| 中国一级特黄录像播放| 国产呦萝稀缺另类资源| 天天操天天爽天天射| 国产欧美一区二区色老头| 欧美性视频在线播放| 国产毛片一区二区三区| 国产综合av一区二区三区| crdy在线观看欧美| 国产精品老女人精品视频| 高清电影在线免费观看| 久青草国产97香蕉在线视频| av在线1区2区| 亚洲欧美中文日韩v在线观看| 亚洲国产成人一区二区| 欧美日韩高清一区二区不卡| 69视频免费看| 欧美性猛交xxxx免费看| 日韩免费av片| 午夜精品福利一区二区蜜股av| 国产一区二区三区在线视频观看| 国产精品人成在线观看免费| 精品无码国产污污污免费网站 | 亚洲性色av| 久久男人资源视频| 久久香蕉av| 欧美日韩成人黄色| 羞羞污视频在线观看| 蜜月aⅴ免费一区二区三区 | 亚洲综合久久久久| 国精品无码一区二区三区| 国产精品盗摄一区二区三区| 日本免费www| 中文久久乱码一区二区| 五月天精品在线| 欧美国产日韩在线观看| 中字幕一区二区三区乱码| 欧美激情一区二区三区在线| 精品人伦一区二区| 日本一区免费视频| 日本猛少妇色xxxxx免费网站| 欧美经典一区二区三区| 日本污视频网站| 国产精品拍天天在线| 美国精品一区二区| 一区在线观看免费| 欧美日韩在线视频免费| 亚洲一区二区三区四区在线观看| 69xx绿帽三人行| 亚洲高清免费在线| 国产区一区二区三| 欧美又粗又大又爽| 97人妻精品一区二区三区软件| 欧美一区二区观看视频| 亚洲欧美另类视频| 日韩高清不卡av| 国产黄色片在线播放| 久久精品视频99| 成人福利影视| 97久久超碰福利国产精品…| 韩国久久久久久| 国产日韩欧美中文| 超碰在线成人| 欧美在线激情| 亚洲女同一区| 成人一对一视频| 日本欧美一区二区三区| 女王人厕视频2ⅴk| 99精品视频在线观看免费| 一级片久久久久| 一区二区三区毛片| 亚洲天堂男人av| 91麻豆精品国产91久久久久久久久| 超碰福利在线观看| 亚洲女在线观看| 国产黄网站在线观看| 性亚洲最疯狂xxxx高清| 成人国产精品| 精品视频第一区| 91麻豆精品国产91久久久平台| 青草网在线观看| 日精品一区二区| 亚洲精品乱码久久久久久蜜桃欧美| 久久婷婷国产综合国色天香| 日韩欧美综合视频| 日韩欧美在线视频观看| 99精品国产99久久久久久97| 亚洲天堂网在线观看| 手机在线免费看av| 国产精品丝袜高跟| 人体久久天天| 毛片av在线播放| 欧美aaa在线| 野花社区视频在线观看| 亚洲欧美日韩久久| 波多野结衣毛片| 亚洲国产精品成人精品| 久草中文在线| 国产免费一区二区三区在线能观看 | 成人一级视频在线观看| 亚洲色图欧美色| 欧美性高潮床叫视频| www.精品视频| 日韩一区二区精品视频| 亚洲伦理影院| 精品久久久久久综合日本| 欧美1区3d| 亚洲精品www.| 欧美国产精品久久| 亚洲 欧美 成人| 精品欧美久久久| 91精品久久久| 成人a在线观看| 清纯唯美综合亚洲| 免费无码av片在线观看| 不卡一卡二卡三乱码免费网站| 五月天婷婷色综合| 91麻豆精品国产91久久久 | 亚洲18色成人| 亚洲精品97久久中文字幕无码| 久久九九精品99国产精品| av在线播放一区| 天堂精品视频| 日本午夜精品一区二区三区电影 | 黄片毛片在线看| 欧美极品欧美精品欧美视频 | 免费一级片在线观看| 91精品在线观看入口| 男女啪啪在线观看| 91在线视频一区| 围产精品久久久久久久| 亚洲第一天堂久久| 国产精品传媒在线| 国产wwwwwww| 欧美激情2020午夜免费观看| 亚洲五码在线| 国产美女主播在线播放 | 欧美www视频| 日韩av激情| 国产精品一级久久久| 99精品国产在热久久婷婷| 国产激情视频网站| 欧美日韩综合视频网址| 日本aaa在线观看| 国产精品扒开腿爽爽爽视频| 成人3d精品动漫精品一二三| 午夜免费福利在线| 亚洲少妇30p| 亚洲欧美另类视频| 日韩av成人在线| 欧美xxxxx视频| 中文字幕人妻无码系列第三区| 亚洲午夜一区二区| 日本成人一区二区三区| 国产精品扒开腿做| 2023国产精品久久久精品双| 精品国产aⅴ一区二区三区东京热 久久久久99人妻一区二区三区 | 欧美人与禽猛交乱配| 久久精品aaaaaa毛片| 日欧美一区二区| 欧美日韩大片在线观看| 亚洲国产精品人人爽夜夜爽| 成人性生交大片免费观看网站| 亚洲欧美日韩综合一区| 处破女av一区二区| 日韩国产成人在线| 久久久精品999| 首页亚洲中字| 日本中文字幕观看| 精品久久久国产精品999| 免费在线毛片| av在线亚洲男人的天堂| 亚洲一区图片| 波多野结衣亚洲一区二区| 亚洲免费av网址| 国产精品久久久久久久久久辛辛 | 欧美高清视频免费观看| 亚洲黄色录像| 国内精品国产三级国产aⅴ久| 婷婷中文字幕综合| 秋霞午夜在线观看| 久久精彩视频| 国产成人精品免费视频网站| 中文字幕在线欧美| 欧美日本高清视频| 成人久久一区| 在线观看日韩精品视频| 欧美一区永久视频免费观看| free欧美| 黄页网站大全在线观看|