成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發 前端
在 Go 這門編程語言中,錯誤處理機制主要是依賴于 if err != nil 的方式。因此在對函數做一定的封裝后。

大家好,我是煎魚。

前幾天看 Reddit 社區里的討論,發現 Go 這一門編程語言,錯誤處理永遠是討論的議題之一。本著追蹤網友腦洞 Proposal 的基礎上,周末看到個被反對比較多的 Go2 錯誤處理提案。

圖片圖片

今天結合分享給大家,好的壞的都可以看看別人的想法。

問題背景

在 Go 這門編程語言中,錯誤處理機制主要是依賴于 if err != nil 的方式。因此在對函數做一定的封裝后。

代碼最終常呈現出以下樣子:

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
}
...

有部分開發者會認為這比較的丑陋、混亂且難以閱讀。

圖片圖片

有人戲稱一個 Go 工程里有 60% 的代碼是 if err != nil,為此我見過直接用 panic 來做錯誤處理的團隊。

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

提案的提出者 @mainjzb,主要的設計目標是:將 # 作為標識位,格式上是把 #xxx 作為程序處理錯誤的標識符。幫助開發者閱讀代碼并簡化代碼。

原本 Go 錯誤處理方式,如下老代碼:

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)
}

使用上述提案后的錯誤標識改造后,新的代碼如下:

// 1. err as value
n := io.Write(x) #err       

// 2. ignore error
n := io.Write(x) #@ignore   

//  3. return error immediately、
n := io.Write(x) #@done     

// 4. wrap additional information
n := io.Write(x) #@wrap("tcp closed: %w") 

// 5. panic err
n := io.Write(x) #@must

結合上述提案改進后的代碼,原作者給出了以下幾種 # 標識符的想法:

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

總結

這個提案的作者有多門編程語言經驗,本次提出的新提案,很明顯是瞄著解決 Go 這門編程語言中的 if err != nil 的不斷重復的代碼內容的方向去的。

雖然原提案作者另辟蹊徑,通過增加 #err 這類標識符來直接扭轉錯誤處理,解決了大量重復 err 代碼。

圖片圖片

但最終與 Go 語言的其他部分過于不適。已經被 ban 了。謹記:想要優化 GO 的 if err != nil 還得要考慮整體適合度,不能一廂情愿。

責任編輯:武曉燕 來源: 腦子進煎魚了
相關推薦

2023-03-10 08:48:29

2022-07-13 08:53:28

函數Go語言

2025-02-08 09:57:20

2020-12-17 06:25:05

Gopanic 模式

2022-10-24 08:55:13

Go工具鏈開發者

2022-09-05 08:55:15

Go2提案語法

2025-02-24 09:30:15

2025-03-31 08:57:25

Go程序性能

2022-12-12 08:53:53

Go版本方式

2024-11-19 09:10:19

迭代器Go語言

2014-11-17 10:05:12

Go語言

2021-04-29 09:02:44

語言Go 處理

2024-02-28 08:54:57

switchGo錯誤

2023-08-22 08:52:14

Go零值標識符

2009-09-23 10:41:10

對象標識符Hibernate

2025-01-26 10:35:42

Go語言類型

2012-02-08 14:01:18

HibernateJava

2009-08-26 14:01:18

C#標識符

2022-05-26 08:53:47

Go函數代碼

2024-03-14 09:35:54

Go 錯誤select代碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国外成人在线视频 | 中文字幕在线观看www | 久热中文字幕 | 草草视频在线播放 | 精品久久香蕉国产线看观看亚洲 | 天天看天天干 | 欧美在线天堂 | 精品久久香蕉国产线看观看亚洲 | 国产精品久久国产精品久久 | 久热精品在线播放 | 最新黄色在线观看 | 久久精品国产一区 | 91青娱乐在线 | 欧美精品在线播放 | 亚洲国产精品99久久久久久久久 | www国产成人免费观看视频 | 亚洲成人精品免费 | 人人澡人人射 | 一级免费毛片 | 丝袜一区二区三区 | 99re热精品视频国产免费 | 欧美三级在线 | 日韩一级免费大片 | 久久小视频 | 玖玖视频网 | 国产日韩欧美激情 | 国产成人精品网站 | 先锋资源网 | 日韩精品亚洲专区在线观看 | 国产成人网 | 精品国产视频 | 久久久久久国产精品 | 欧美国产精品一区二区三区 | 欧美激情精品久久久久 | 日韩精品在线看 | 99久久精品免费 | 国产精品99久久久久久宅男 | 久热爱 | 欧美精品日韩精品 | 亚洲欧美精品一区 | 一级做a爰片性色毛片 |