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

Go 錯誤處理語法之爭塵埃落定?Go 團隊為何十五年探索后仍選擇“不”

開發 前端
Go 語言在錯誤處理語法上的探索歷程,充分體現了其在語言設計上的審慎與對社區反饋的重視。盡管長達十五年的努力未能催生出被廣泛接受的新語法,但這并不代表失敗,而是對 Go 核心設計原則的堅守和對現實復雜性的認知。

本文轉載自微信公眾號「TonyBai」,作者白明的贊賞賬戶 。轉載本文請聯系TonyBai公眾號。

長久以來,Go 語言中 if err != nil 的錯誤處理模式因其普遍性和由此帶來的代碼冗余,一直是社區反饋中最持久、最突出的痛點之一。盡管 Go 團隊及社區投入了大量精力,歷經近十五年的探索,提出了包括 check/handle、try 內建函數以及借鑒 Rust的?操作符在內的多種方案,但始終未能就新的錯誤處理語法達成廣泛共識。近日,Go 官方團隊通過一篇博文(https://go.dev/blog/error-syntax)正式闡述了其最新立場:在可預見的未來,將停止尋求通過改變語法來簡化錯誤處理,并將關閉所有相關的提案。 這一決策無疑在 Go 社區引發了廣泛關注和深入思考。

漫漫探索路:從 check/handle 到 ? 操作符

Go 語言的錯誤處理冗余問題,尤其在涉及大量 API 調用且錯誤處理邏輯相對簡單的場景下尤為突出。一個典型的例子如下:

func printSum(a, b string) error {
    x, err := strconv.Atoi(a)
    if err != nil {
        return err // 樣板代碼
    }
    y, err := strconv.Atoi(b)
    if err != nil {
        return err // 樣板代碼
    }
    fmt.Println("result:", x + y)
    return nil
}

在這個函數中,近一半的代碼行用于錯誤檢查和返回,這無疑增加了代碼的視覺噪音,降低了核心邏輯的清晰度。因此,多年來,改進錯誤處理的呼聲在 Go 開發者年度調查中一直居高不下。

Go 團隊對此高度重視,并進行了一系列嘗試:

check/handle 機制 (2018年)

由 Russ Cox 正式提出,基于 Marcel van Lohuizen 的草案設計。該機制引入了 check 用于檢查錯誤并提前返回,handle 用于定義錯誤處理邏輯。

// 設想的 check/handle 用法
func printSum(a, b string) error {
    handle err { return err } // 定義錯誤處理
    x := check strconv.Atoi(a) // 檢查錯誤
    y := check strconv.Atoi(b) // 檢查錯誤
    fmt.Println("result:", x + y)
    return nil
}

然而,該方案因其復雜性未被廣泛接受。

try 內建函數 (2019年)

作為 check/handle 的簡化版,try 函數會在遇到錯誤時從其所在的封閉函數返回。

// 設想的 try 用法
func printSum(a, b string) error {
    x := try(strconv.Atoi(a))
    y := try(strconv.Atoi(b))
    fmt.Println("result:", x + y)
    return nil
}

盡管 Go 團隊投入巨大,但 try 因其隱式的控制流改變(可能從深層嵌套表達式中返回)而遭到許多開發者的反對,最終也被放棄。Go 團隊反思,或許引入新關鍵字并限制 try 的使用范圍會是更好的路徑。

借鑒 Rust 的 ? 操作符 (2024年)

由 Ian Lance Taylor 提出,希望通過借鑒其他語言中已驗證的機制來取得突破。

// 設想的 ? 操作符用法
func printSum(a, b string) error {
    x := strconv.Atoi(a) ?
    y := strconv.Atoi(b) ?
    fmt.Println("result:", x + y)
    return nil
}

此方案雖然在小范圍用戶研究中表現出一定的直觀性,但在社區討論中依然未能形成足夠支持,并引發了大量關于細節調整的建議。

除了官方提案,社區也貢獻了數以百計的錯誤處理改進方案,但無一例外都未能獲得壓倒性的支持。

官方立場:為何按下暫停鍵?

面對多年探索未果的局面,Go 團隊基于以下幾點理由,做出了暫停錯誤處理語法層面改進的決定。

缺乏社區共識

這是最核心的原因。根據 Go 的提案流程,一項提案需要得到社區的普遍共識才能被接受。然而,在錯誤處理語法這個問題上,無論是官方還是社區的提案,都未能凝聚起足夠的共識。甚至 Go 團隊內部也未能就最佳方案達成一致。

維護現狀的合理性

  • 時機問題: Go 已經發展了十五年,現有的錯誤處理方式雖然冗余,但功能完善且被廣泛理解和使用。早期引入語法糖可能更容易被接受,但現在改變的門檻更高。
  • 避免制造新的“不快樂”: 即使找到了“完美”方案,強制推廣新語法也可能讓習慣了現有方式的開發者感到不適,重蹈類似泛型引入初期的一些爭議。但與泛型不同,錯誤處理語法幾乎會影響所有開發者。
  • Go 的設計哲學: Go 傾向于“只提供一種(或盡可能少)的方式來做同一件事”。引入新的錯誤處理語法會打破這一原則。有趣的是,:= 短變量聲明中的變量重聲明規則,最初也是為了解決連續錯誤檢查中 err 變量命名問題而引入的,如果早期有更好的錯誤處理語法,這個規則或許就不需要了。

關注錯誤處理的本質,而非僅僅語法

  • 當錯誤被“真正處理”時,冗余感會降低。 良好的錯誤處理通常需要附加額外上下文信息,而不僅僅是簡單返回。例如:
func printSum(a, b string) error {
    x, err := strconv.Atoi(a)
    if err != nil {
        return fmt.Errorf("invalid integer: %q", a) // 附加信息
    }
    // ...
    return nil
}

在這種情況下,if err != nil 的樣板代碼占比相對減小。

  • 標準庫的增強: 新的庫函數(如 cmp.Or)或未來的庫特性,可以在不改變語法的情況下幫助減少錯誤處理的樣板代碼。
func printSum(a, b string) error {
    x, err1 := strconv.Atoi(a)
    y, err2 := strconv.Atoi(b)
    if err := cmp.Or(err1, err2); err != nil { // 使用 cmp.Or
        return err
    }
    fmt.Println("result:", x+y)
    return nil
}

工具的輔助作用

  • 編寫時: 現代 IDE(包括基于 LLM 的工具)已經能夠很好地輔助生成重復的錯誤檢查代碼。
  • 閱讀時: IDE 或可提供隱藏/折疊錯誤處理代碼塊的功能,減少視覺干擾。
  • 調試時: 顯式的 if 語句更便于設置斷點和添加調試輸出,而高度集成的語法糖可能會使調試變得復雜。

語言演進的成本與優先級

  • 任何語言的改動都伴隨著巨大的成本:設計、實現、文檔更新、工具調整以及社區的適應。Go 團隊規模有限,需要優先處理其他重要事項。
  • 開發者習慣的演變: 許多有經驗的 Go 開發者表示,隨著對 Go 錯誤處理哲學的深入理解和實踐,最初感到的冗余問題會逐漸減輕。

對開發者的影響與未來展望

Go 團隊的這一決定,意味著在可預見的未來,if err != nil 仍將是 Go 語言錯誤處理的標準范式。開發者需要:

  • 接受現狀并深入理解其哲學: Rob Pike 的名言“Errors are values”依然是理解 Go 錯誤處理的核心。錯誤是程序正常流程的一部分,顯式處理它們有助于編寫健壯的軟件。
  • 利用現有工具和庫:

善用 IDE 的代碼生成和輔助功能。

探索和使用標準庫或第三方庫提供的錯誤處理輔助工具(如 errors.Is, errors.As, fmt.Errorf的 %w 以及可能的新庫特性)。

  • 關注代碼質量而非單純追求簡潔: 在需要詳細錯誤上下文的地方,不要吝嗇代碼。清晰、可追溯的錯誤比極度簡化的語法糖更有價值。
  • 代碼可讀性依然重要: 盡管語法層面不再追求極致簡潔,但在錯誤處理邏輯本身,依然要力求清晰、易懂。

Go 團隊也指出,他們并未完全關閉對錯誤處理改進的大門,只是將焦點從“語法層面”移開。未來可能會更深入地研究錯誤處理的本質問題,例如如何更好地構造和傳遞包含豐富上下文的錯誤信息,以及通過庫而非語法來提供更好的支持。

小結

Go 語言在錯誤處理語法上的探索歷程,充分體現了其在語言設計上的審慎與對社區反饋的重視。盡管長達十五年的努力未能催生出被廣泛接受的新語法,但這并不代表失敗,而是對 Go 核心設計原則的堅守和對現實復雜性的認知。

對開發者而言,這意味著需要繼續在現有的、經過驗證的錯誤處理模式下精進技藝,同時期待 Go 語言在庫和工具層面帶來更多輔助,以更優雅、更高效地構建可靠的應用程序。

這場關于錯誤處理的“語法之爭”雖然暫時告一段落,但其引發的關于簡潔、清晰、實用與語言穩定性的思考,將對 Go 的長遠發展產生深遠影響。

責任編輯:武曉燕 來源: TonyBai
相關推薦

2022-12-28 07:41:28

IEEdge微軟

2025-06-06 06:45:54

2011-10-11 10:11:01

SPB ECMP802.1Qbc數據中心

2013-05-07 10:41:00

Fortinet

2014-11-17 10:05:12

Go語言

2021-04-29 09:02:44

語言Go 處理

2020-09-14 12:41:24

TikTok微軟甲骨文

2011-10-17 12:08:13

微軟

2016-12-07 12:54:46

DB-Engines數據庫排名Oracle

2021-08-14 06:52:03

5G 5G網絡5G招標

2010-01-22 09:12:55

2022-07-13 08:53:28

函數Go語言

2025-02-24 09:30:15

2011-05-27 09:10:26

AttachmateSUSENovell

2011-10-28 10:43:09

惠普PC部門

2023-05-05 14:04:50

2025-06-05 02:25:00

2019-05-29 20:45:40

谷歌甲骨文糾紛

2012-12-19 10:15:04

HTML 5

2009-12-15 10:11:10

點贊
收藏

51CTO技術棧公眾號

狠狠躁狠狠躁视频专区| 97久久人人超碰caoprom欧美 | 亚洲s色大片| 制服诱惑一区二区| 亚洲一二在线观看| 国产又粗又猛又爽又黄| 欧美性猛交xxx高清大费中文| 成人午夜激情在线| 国产精品老女人视频| 久久黄色免费视频| 精品高清在线| 亚洲国产精品高清久久久| 日韩精品一区二区三区四| 久久久久久青草| 国产成人福利片| 国产精品网址在线| 国产精品99久久久久久成人| 台湾色综合娱乐中文网| 日韩情涩欧美日韩视频| 我看黄色一级片| 亚洲精品成人图区| 亚洲一区二区免费视频| 一区二区三区四区视频在线| 国产精品久久久久久久一区二区 | 亚洲一级黄色av| 最新日本中文字幕| 欧洲亚洲精品久久久久| 色综合久久99| av免费播放网址| 成年人视频免费在线播放| 中文字幕中文字幕在线一区 | 99久久久无码国产精品免费| 韩日欧美一区| 中文字幕在线看视频国产欧美| 精品国产鲁一鲁一区二区三区| 伊人电影在线观看| 中文字幕色av一区二区三区| 色爱区成人综合网| 青青草视频在线免费观看| 日本美女一区二区三区| 欧美性视频精品| 免费毛片一区二区三区| 狠狠色丁香久久综合频道| 欧美大码xxxx| 久久久久亚洲av片无码| 欧美第一精品| 久久精视频免费在线久久完整在线看| 中文字幕人妻一区| 66精品视频在线观看| 岛国精品视频在线播放| 日韩亚洲视频| 成人免费在线观看| 国产精品网站在线播放| 亚洲精品国产精品久久| 成人在线免费公开观看视频| 国产欧美一区二区精品仙草咪| 亚洲字幕一区二区| a在线观看视频| 国产suv精品一区二区三区| 99久久综合狠狠综合久久止| 日韩欧美在线观看免费| 久久亚洲视频| 国产美女久久久| 97精品人妻一区二区三区香蕉| 国产一区二区三区久久| 久久视频在线看| 日韩a级片在线观看| 亚洲中无吗在线| 久久久久久久999精品视频| 日本特黄一级片| 亚洲女人av| 国产成人精品av在线| 亚洲熟妇av乱码在线观看| 精品一区二区三区蜜桃| 国产成人精品免费久久久久| 亚洲婷婷久久综合| 狠狠v欧美v日韩v亚洲ⅴ| 日本老师69xxx| 在线观看中文字幕网站| 国产福利一区在线| 久久综合福利| 麻豆视频在线观看免费| 亚洲激情图片一区| aaa毛片在线观看| 在线视频成人| 日韩国产精品视频| 国产在线观看免费视频软件| 欧美婷婷在线| 国产精品∨欧美精品v日韩精品| 丰满少妇乱子伦精品看片| 天堂久久久久va久久久久| 91精品国产综合久久久久久久久| 中日韩在线观看视频| 国产在线观看免费一区| 久久久免费看| 国产一二三区在线观看| 欧美日韩国产色视频| 国产原创中文在线观看| 97成人超碰| 亚洲大胆人体av| 纪美影视在线观看电视版使用方法| 国产一区二区区别| 国产亚洲精品久久久久久777| 丰满少妇在线观看资源站| 97精品国产| 欧美性受xxxx黑人猛交| av中文字幕在线免费观看| 久久久三级国产网站| 日本免费高清一区二区| 午夜羞羞小视频在线观看| 在线视频亚洲一区| 亚洲精品在线视频免费观看| 天天久久综合| 国产精品视频播放| 青青色在线视频| 国产喂奶挤奶一区二区三区| 热久久最新地址| 国产激情久久| 亚洲欧洲日本专区| a一级免费视频| 视频一区二区三区中文字幕| 国产精品果冻传媒潘| 国产区在线看| 欧美日韩高清在线| 亚洲欧洲久久久| 在线一区视频| 国产日韩久久| 欧美xxxbbb| 欧美一区二区美女| 国产在线免费看| 老色鬼精品视频在线观看播放| 91精品视频播放| av一本在线| 在线亚洲免费视频| 国产伦理片在线观看| 在线综合欧美| 精品日本一区二区三区| 日本不卡影院| 在线视频综合导航| 亚洲天堂小视频| 欧美一区激情| 91青青草免费在线看| www.久久爱.cn| 中文字幕一区在线播放| 日韩精品一级二级 | 日本精品视频| 不卡毛片在线看| 国产精品免费无遮挡| 国产精品每日更新在线播放网址 | xxxx视频在线| 欧美精品一区二区不卡| 日韩成人免费在线视频| 成人高清免费观看| 免费国产a级片| 伊人春色精品| 国产精品九九九| 黄色小视频免费观看| 亚洲成av人片一区二区三区| 亚洲一二三四五| 日韩图片一区| 日本欧美色综合网站免费| 超碰成人av| 日韩成人在线视频网站| 一级黄色av片| 亚洲视频资源在线| 日本美女高潮视频| 欧美1级片网站| 91九色国产在线| 久色国产在线| 亚洲男人天堂九九视频| 欧美成人一区二区三区四区| 中文字幕不卡在线观看| 亚洲色图欧美自拍| 影音先锋在线一区| 欧美日韩在线精品一区二区三区| 国产v日韩v欧美v| 亚洲另类激情图| 中文字幕在线网站| 一区二区三区日韩精品视频| 欧美日韩理论片| 亚洲激情另类| 午夜精品美女久久久久av福利| 综合日韩av| 久久久久999| 午夜成人免费影院| 午夜久久久影院| 亚洲 中文字幕 日韩 无码| 色综合蜜月久久综合网| 痴汉一区二区三区| 精品无人乱码一区二区三区| 欧美成人免费观看| 精品影院一区| 精品国产一区二区三区av性色| 欧美日韩人妻精品一区二区三区 | 色视频欧美一区二区三区| 午夜激情福利电影| www.欧美.com| 涩涩网站在线看| 国产精品综合色区在线观看| 在线免费观看成人| 天堂av一区二区三区在线播放| 91av成人在线| bt在线麻豆视频| 一本久久综合亚洲鲁鲁| 欧美在线 | 亚洲| 在线电影院国产精品| 亚洲高清毛片一区二区| 亚洲综合免费观看高清完整版在线 | 久久精品—区二区三区舞蹈| 国产精品99久久久久久久vr| 午夜欧美福利视频| 国产农村妇女精品一区二区| 免费av一区二区三区| 日韩一区网站| 成人国产精品久久久| 超碰aⅴ人人做人人爽欧美| 欧美激情视频在线免费观看 欧美视频免费一| 国产麻豆免费观看| 在线观看一区日韩| 成人精品免费在线观看| 亚洲黄色av一区| 日本裸体美女视频| 国产视频一区在线播放| 女同激情久久av久久| 久久免费黄色| 成人免费在线小视频| 亚洲视频狠狠| 欧美大黑帍在线播放| 91精品综合| 黄色a级在线观看| 欧美国产一级| 亚洲国产精品视频一区| 国产精品日韩精品中文字幕| 久久香蕉综合色| 久久综合社区| 久久大片网站| 国产精品日韩精品在线播放| 国产精品视频一区国模私拍| 在线观看av免费| 久久天天躁狠狠躁老女人| 日本在线免费看| 俺也去精品视频在线观看| www.国产精品.com| 自拍偷拍亚洲一区| 无码精品人妻一区二区三区影院 | 午夜精品久久久久久99热| 9191在线播放| 欧美极品少妇xxxxⅹ免费视频| 99视频在线观看地址| 色系列之999| 黄色网在线免费观看| 伦理中文字幕亚洲| 中文字幕在线观看播放| 欧美激情三级免费| 999av小视频在线| 日本a级片电影一区二区| 欧美电影网站| 国产精品欧美日韩一区二区| 国产69精品久久| 91九色综合久久| 蜜桃在线一区| 国产欧美日韩在线播放| 亚州精品国产| 99在线视频首页| 色综合久久中文| 日韩一本精品| 午夜影院欧美| cao在线观看| 丝袜诱惑制服诱惑色一区在线观看 | 青青草视频在线观看| 一二美女精品欧洲| 美女av在线播放| 国内免费久久久久久久久久久 | 国产欧美一区二区精品久久久| 国产一区免费观看| 国产亚洲欧美日韩在线观看一区二区| 国产精品一区二区三区观看| 在线视频亚洲专区| 五月天av影院| 亚洲精品资源| 日韩高清第一页| 不卡av电影在线播放| 亚洲美女精品视频| 久久精品人人爽人人爽| 人妻久久一区二区| 欧美色视频日本版| 国产精品一级二级| 亚洲精品视频免费在线观看| 免费黄色网址在线观看| 国内精品模特av私拍在线观看 | 国产裸体写真av一区二区| 中文在线综合| 亚洲一区二区四区| 国产日韩一区二区三区在线| 成人一区二区免费视频| 男人操女人的视频在线观看欧美| 熟妇人妻无乱码中文字幕真矢织江| 久久久久综合| 性xxxxxxxxx| 国产精品视频一二| 一级片中文字幕| 欧美性猛交xxxxx水多| 国产农村妇女毛片精品久久| 亚洲欧洲在线视频| 九色91在线| 96国产粉嫩美女| 国产一卡不卡| 亚洲中文字幕无码不卡电影| 国产成人在线色| 在线观看国产免费视频| 亚洲欧美一区二区久久| 久久午夜无码鲁丝片午夜精品| 一区二区三区中文字幕精品精品 | 亚洲主播在线播放| 中文字幕在线观看第二页| 91精品欧美一区二区三区综合在 | 99久久久成人国产精品| 欧美成人在线免费观看| 亚洲精品韩国| 久久久久亚洲av无码网站| 国产精品蜜臀av| 中文字幕第三页| 亚洲午夜国产成人av电影男同| 日本视频在线免费观看| 欧洲美女免费图片一区| 国产精品zjzjzj在线观看| 黄色一级片国产| 精品一区二区免费视频| 纪美影视在线观看电视版使用方法| 亚洲视频1区2区| 久草手机在线观看| 日韩精品久久久久| 碰碰在线视频| 成人免费激情视频| 玖玖玖免费嫩草在线影院一区| 五月天久久狠狠| 免费人成黄页网站在线一区二区| 国产女主播在线播放| 亚洲一区二区三区四区五区中文| 男人天堂2024| 亚洲欧美一区二区三区四区| 成人av黄色| 亚洲综合一区二区不卡| 欧美激情91| 欧美性猛交xxx乱久交| 久久精品视频一区二区三区| 中文字幕激情小说| 日韩精品专区在线| 青青草视频在线免费直播| 国产精品综合久久久久久| 日韩亚洲精品在线| 精品夜夜澡人妻无码av| 一本色道久久综合狠狠躁的推荐| 国产成a人亚洲精v品无码| 欧美日韩国产成人在线观看| 国产成人久久精品麻豆二区| 一区二区精品国产| 国产一区日韩二区欧美三区| 久久综合色综合| 亚洲精品久久久久久久久久久 | 精品国产91久久久久久浪潮蜜月| 国产欧美精品aaaaaa片| 九九视频精品免费| 国产小视频自拍| 欧美日韩国产123区| 午夜av在线免费观看| 国产一区二区三区色淫影院| 亚洲经典一区| 欧美双性人妖o0| 色婷婷久久久久swag精品| 色影视在线观看| 国产经品一区二区| 国产精品亚洲综合久久| 99久久久无码国产精品性波多 | 亚洲毛片在线观看.| 日韩欧美少妇| 91免费视频黄| 久久99精品国产麻豆婷婷 | 99re热精品视频| 国产精品igao激情视频| 韩国av一区二区三区四区 | 日韩在线黄色| 中文字幕永久有效| 精品国产91乱高清在线观看| 超碰97在线免费观看| 成人免费91在线看| 亚洲国产高清视频| 欧美激情 一区| 欧美少妇一区二区| 涩涩涩999| 亚洲视屏一区| 人人妻人人澡人人爽| 精品精品欲导航| 国产情侣一区二区三区| 色狠狠色噜噜噜综合网| 婷婷婷国产在线视频| 91久久久久久久| 久久国产日本精品| 中文字幕av免费在线观看| 欧美精品一卡二卡|