AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

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

Go 新提案:用 #err 標(biāo)識符去做錯(cuò)誤處理!

來源: 責(zé)編: 時(shí)間:2024-06-05 17:41:23 133觀看
導(dǎo)讀大家好,我是煎魚。前幾天看 Reddit 社區(qū)里的討論,發(fā)現(xiàn) Go 這一門編程語言,錯(cuò)誤處理永遠(yuǎn)是討論的議題之一。本著追蹤網(wǎng)友腦洞 Proposal 的基礎(chǔ)上,周末看到個(gè)被反對比較多的 Go2 錯(cuò)誤處理提案。圖片今天結(jié)合分享給大家,好的

大家好,我是煎魚。NIv28資訊網(wǎng)——每日最新資訊28at.com

前幾天看 Reddit 社區(qū)里的討論,發(fā)現(xiàn) Go 這一門編程語言,錯(cuò)誤處理永遠(yuǎn)是討論的議題之一。本著追蹤網(wǎng)友腦洞 Proposal 的基礎(chǔ)上,周末看到個(gè)被反對比較多的 Go2 錯(cuò)誤處理提案。NIv28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片NIv28資訊網(wǎng)——每日最新資訊28at.com

今天結(jié)合分享給大家,好的壞的都可以看看別人的想法。NIv28資訊網(wǎng)——每日最新資訊28at.com

問題背景

在 Go 這門編程語言中,錯(cuò)誤處理機(jī)制主要是依賴于 if err != nil 的方式。因此在對函數(shù)做一定的封裝后。NIv28資訊網(wǎng)——每日最新資訊28at.com

代碼最終常呈現(xiàn)出以下樣子:NIv28資訊網(wǎng)——每日最新資訊28at.com

jy1, err := GetFoo()if err != nil {    return err}jy2, err := SliceTheBar(varFoo)if err != nil {    return err}err := CheckBarSlice(sliceBar)if err != nil {    return err}...

有部分開發(fā)者會認(rèn)為這比較的丑陋、混亂且難以閱讀。NIv28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片NIv28資訊網(wǎng)——每日最新資訊28at.com

有人戲稱一個(gè) Go 工程里有 60% 的代碼是 if err != nil,為此我見過直接用 panic 來做錯(cuò)誤處理的團(tuán)隊(duì)。NIv28資訊網(wǎng)——每日最新資訊28at.com

新提案:用 #err 作為標(biāo)識符

提案的提出者 @mainjzb,主要的設(shè)計(jì)目標(biāo)是:將 # 作為標(biāo)識位,格式上是把 #xxx 作為程序處理錯(cuò)誤的標(biāo)識符。幫助開發(fā)者閱讀代碼并簡化代碼。NIv28資訊網(wǎng)——每日最新資訊28at.com

原本 Go 錯(cuò)誤處理方式,如下老代碼:NIv28資訊網(wǎng)——每日最新資訊28at.com

n, err := io.Write(x)n, _ := io.Write(x) n, err := io.Write(x)if err != nil {   return 0, err}n, err := io.Write(x)if err != nil {   return 0, fmt.Error("tcp closed: %w", err)}n, err := io.Write(x)if err != nil{    panic(err)}

使用上述提案后的錯(cuò)誤標(biāo)識改造后,新的代碼如下:NIv28資訊網(wǎng)——每日最新資訊28at.com

// 1. err as valuen := io.Write(x) #err       // 2. ignore errorn := io.Write(x) #@ignore   //  3. return error immediately、n := io.Write(x) #@done     // 4. wrap additional informationn := io.Write(x) #@wrap("tcp closed: %w") // 5. panic errn := io.Write(x) #@must

結(jié)合上述提案改進(jìn)后的代碼,原作者給出了以下幾種 # 標(biāo)識符的想法:NIv28資訊網(wǎng)——每日最新資訊28at.com

  1. #err 標(biāo)識符:err 變量作為值,一切與以前 error 一樣。只是變成了 #err 的標(biāo)識用法。
  2. #@ignore 標(biāo)識符:使忽略錯(cuò)誤變得比以前更易讀,也可以用附加的描述信息便于開發(fā)者閱讀。
  3. #@done 標(biāo)識符:直接返回錯(cuò)誤信息。很多時(shí)候(特別是在庫中),只需要返回錯(cuò)誤,無需執(zhí)行任何操作。例如:url.parseAuthority。
  4. #@wrap 標(biāo)識符:在 error 上附帶更多的錯(cuò)誤信息,例如:#@wrap 在實(shí)際業(yè)務(wù)代碼中可以寫作 #@wrap("io.Wirite err:")。
  5. #@must 標(biāo)識符:這個(gè)標(biāo)識符可以在產(chǎn)生錯(cuò)誤時(shí),直接觸發(fā) panic 事件。

總結(jié)

這個(gè)提案的作者有多門編程語言經(jīng)驗(yàn),本次提出的新提案,很明顯是瞄著解決 Go 這門編程語言中的 if err != nil 的不斷重復(fù)的代碼內(nèi)容的方向去的。NIv28資訊網(wǎng)——每日最新資訊28at.com

雖然原提案作者另辟蹊徑,通過增加 #err 這類標(biāo)識符來直接扭轉(zhuǎn)錯(cuò)誤處理,解決了大量重復(fù) err 代碼。NIv28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片NIv28資訊網(wǎng)——每日最新資訊28at.com

但最終與 Go 語言的其他部分過于不適。已經(jīng)被 ban 了。謹(jǐn)記:想要優(yōu)化 GO 的 if err != nil 還得要考慮整體適合度,不能一廂情愿。NIv28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-92114-0.htmlGo 新提案:用 #err 標(biāo)識符去做錯(cuò)誤處理!

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

上一篇: Python動態(tài)創(chuàng)建類,為編程帶來極大的靈活性和擴(kuò)展性

下一篇: Axios Node 端請求是如何實(shí)現(xiàn)的?

標(biāo)簽:
  • 熱門焦點(diǎn)
Top