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

當前位置:首頁 > 科技  > 軟件

Go 新提案:用 #err 標識符去做錯誤處理!

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

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

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

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

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

問題背景

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

代碼最終常呈現(xiàn)出以下樣子:imO28資訊網(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ā)者會認為這比較的丑陋、混亂且難以閱讀。imO28資訊網(wǎng)——每日最新資訊28at.com

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

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

新提案:用 #err 作為標識符

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

原本 Go 錯誤處理方式,如下老代碼:imO28資訊網(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)}

使用上述提案后的錯誤標識改造后,新的代碼如下:imO28資訊網(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

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

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

總結

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

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

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

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

本文鏈接:http://www.www897cc.com/showinfo-26-92114-0.htmlGo 新提案:用 #err 標識符去做錯誤處理!

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

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

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

標簽:
  • 熱門焦點
  • 太卷!Redmi MAX 100英寸電視便宜了:12999元買Redmi史上最大屏

    8月5日消息,從小米商城了解到,Redmi MAX 100英寸巨屏電視日前迎來官方優(yōu)惠,到手價12999元,比發(fā)布價便宜了7000元,在大屏電視市場開卷。據(jù)了解,Redmi MAX 100
  • 十個可以手動編寫的 JavaScript 數(shù)組 API

    JavaScript 中有很多API,使用得當,會很方便,省力不少。 你知道它的原理嗎? 今天這篇文章,我們將對它們進行一次小總結。現(xiàn)在開始吧。1.forEach()forEach()用于遍歷數(shù)組接收一參
  • Golang 中的 io 包詳解:組合接口

    io.ReadWriter// ReadWriter is the interface that groups the basic Read and Write methods.type ReadWriter interface { Reader Writer}是對Reader和Writer接口的組合,
  • 一篇文章帶你了解 CSS 屬性選擇器

    屬性選擇器對帶有指定屬性的 HTML 元素設置樣式。可以為擁有指定屬性的 HTML 元素設置樣式,而不僅限于 class 和 id 屬性。一、了解屬性選擇器CSS屬性選擇器提供了一種簡單而
  • Python異步IO編程的進程/線程通信實現(xiàn)

    這篇文章再講3種方式,同時講4中進程間通信的方式一、 Python 中線程間通信的實現(xiàn)方式共享變量共享變量是多個線程可以共同訪問的變量。在Python中,可以使用threading模塊中的L
  • 共享單車的故事講到哪了?

    來源丨海克財經(jīng)與共享充電寶相差不多,共享單車已很久沒有被國內(nèi)熱點新聞關照到了。除了一再漲價和用戶直呼用不起了。近日多家媒體再發(fā)報道稱,成都、天津、鄭州等地多個共享單
  • 梁柱接棒兩年,騰訊音樂闖出新路子

    文丨田靜 出品丨牛刀財經(jīng)(niudaocaijing)7月5日,企鵝FM發(fā)布官方公告稱由于業(yè)務調(diào)整,將于9月6日正式停止運營,這意味著騰訊音樂長音頻業(yè)務走向消亡。騰訊在長音頻領域還在摸索。為
  • 消費結構調(diào)整丨巨頭低價博弈,拼多多還卷得動嗎?

    來源:征探財經(jīng)作者:陳香羽隨著流量紅利的退潮,電商的存量博弈越來越明顯。曾經(jīng)主攻中高端與品質(zhì)的淘寶天貓、京東重拾“低價”口號。而過去與他們錯位競爭的拼多多,靠
  • 自研Exynos回歸!三星Galaxy S24系列將提供Exynos和驍龍雙版本

    年初,全新的三星Galaxy S23系列發(fā)布,包含Galaxy S23、Galaxy S23+和Galaxy S23 Ultra三個版本,全系搭載超頻版驍龍8 Gen 2,雖同樣采用臺積電4nm工藝制
Top 主站蜘蛛池模板: 扶沟县| 磐安县| 上蔡县| 宝应县| 怀化市| 平罗县| 威远县| 西安市| 阳城县| 潮州市| 四川省| 南通市| 和平县| 千阳县| 黔南| 辉南县| 星子县| 池州市| 辽源市| 宜兰市| 乳源| 西盟| 九寨沟县| 伊宁县| 永登县| 万源市| 城口县| 肥城市| 杨浦区| 晋中市| 且末县| 子洲县| 全南县| 延安市| 常州市| 梧州市| 德昌县| 榆树市| 舞钢市| 乳源| 白城市|