精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

日韩欧美在线影院| 中文字幕中文字幕一区二区| 91国自产精品中文字幕亚洲| 波多野结衣片子| 亚洲欧洲一二区| 亚洲高清不卡在线观看| 久久久久一区二区三区| 一级黄色片免费看| 亚洲另类视频| www国产亚洲精品久久网站| aaa黄色大片| 日本免费一区二区三区四区| 亚洲精品久久7777| 日产精品高清视频免费| www.亚洲欧美| 麻豆精品在线观看| 性欧美xxxx交| 精品欧美一区二区久久久久| 米奇777超碰欧美日韩亚洲| 欧美一区二区三区影视| 波多野结衣作品集| free性m.freesex欧美| 国产精品久99| 欧洲国产精品| 人妻精品无码一区二区| 国内精品伊人久久久久av影院 | 伊人久久视频| 亚洲精品日韩综合观看成人91| 免费中文日韩| 日批视频在线播放| 国产老女人精品毛片久久| 国产成人jvid在线播放| 日韩特黄一级片| 欧美黄在线观看| 中文字幕亚洲综合久久| 精品无人区无码乱码毛片国产| 超碰精品在线| 日韩色视频在线观看| 日本高清久久久| 欧美日韩精品一区二区三区视频| 激情亚洲一区二区三区四区| 91动漫在线看| 日韩三级免费| 亚洲午夜私人影院| 黄色一级大片免费| 在线中文字幕第一页| 1000精品久久久久久久久| 日韩精品无码一区二区三区| 欧美日韩伦理片| 91色porny蝌蚪| 精品国产一区二区三| 色欲av伊人久久大香线蕉影院| 国产高清在线精品| 亚洲字幕一区二区| a在线观看视频| 国产成人免费视频一区| 国产精品久久久久久久久久久久午夜片 | 日韩精品在线观看视频| 亚洲天堂av网站| 综合中文字幕| 精品福利视频一区二区三区| 国产香蕉精品视频| 秋霞在线一区| 国产亚洲精品va在线观看| 久久久久久亚洲中文字幕无码| 国产成人高清| 中文字幕久久精品| 手机av在线看| 亚洲网站在线| 3344国产精品免费看| 亚洲精品中文字幕乱码三区91| 久久一日本道色综合久久| 国产精品成人一区| 国产精品一区二区av白丝下载| 国产制服丝袜一区| 成人h视频在线观看| 色婷婷中文字幕| 国产偷国产偷精品高清尤物| 亚洲三区在线| 尤物yw193can在线观看| 亚洲观看高清完整版在线观看 | hd国产人妖ts另类视频| 欧美日韩在线影院| 成年网站在线播放| 欧美一级大片在线视频| 亚洲成人网久久久| 亚洲精品乱码久久久久久久久久久久 | 日韩精品最新网址| 国产熟妇搡bbbb搡bbbb| 俺要去色综合狠狠| 欧美激情精品久久久久久蜜臀| 特级西西444www大精品视频免费看| 日韩vs国产vs欧美| 国产精品theporn88| 黄色大片在线免费观看| 亚洲欧美一区二区三区极速播放 | 中文字幕人妻一区二| 日韩一区二区久久| 国产精品亚洲片夜色在线| 亚洲国产精品18久久久久久| 久久久精品国产免费观看同学| 亚洲欧美日韩不卡| 91久久国产综合久久91猫猫| 日韩午夜在线影院| 公肉吊粗大爽色翁浪妇视频| 亚洲性视频h| 国产免费一区二区三区香蕉精| 亚洲成人77777| 国产精品夫妻自拍| 国产女大学生av| 伊人久久噜噜噜躁狠狠躁| 亚洲最大在线视频| 欧美一级特黄视频| 成人一区在线观看| 少妇熟女一区二区| 亚洲www啪成人一区二区| 精品免费国产一区二区三区四区| 日本精品久久久久中文| 国产精品入口| 国产精品乱码视频| 99在线播放| 欧美日韩不卡一区| 国产黄色大片免费看| 99精品国产一区二区青青牛奶 | 91精品无人成人www| 欧洲亚洲一区二区三区| 欧美激情视频网站| 国产乱色精品成人免费视频 | 国产一区二区三区视频在线播放| 欧美日韩在线精品一区二区三区| 国产嫩草在线视频| 91精品福利在线一区二区三区 | 国产一区电影| 色偷偷一区二区三区| 天堂www中文在线资源| 亚洲精品网址| 成人一区二区电影| 3d成人动漫在线| 欧美日韩另类国产亚洲欧美一级| 性欧美一区二区| 日韩精品成人一区二区在线| 久久综合伊人77777麻豆| f2c人成在线观看免费视频| 精品国产乱码久久久久久免费 | 欧美最猛性xxxxx直播| 成人免费看aa片| 爽爽淫人综合网网站| 欧美一级精品大片| 欧美日韩视频免费在线观看| www.久久.com| 在线观看欧美日韩国产| 国模私拍一区二区| 国产精品乱码妇女bbbb| 污视频网站观看| 99视频精品全部免费在线视频| 国产精品视频网站| 日本高清中文字幕在线| 欧美一区三区二区| 久久久国产精品黄毛片| 成人精品gif动图一区| 国产二区视频在线| 偷拍亚洲色图| 国产精品福利在线| 国产精品扒开做爽爽爽的视频| 日韩一区二区三区av| 国产精品第一页在线观看| 91免费版在线看| 国产成人精品无码播放| 日韩在线欧美| 成人欧美一区二区三区视频xxx| 国产白丝在线观看| 亚洲免费精彩视频| 一卡二卡三卡在线| 亚洲制服丝袜一区| 30一40一50老女人毛片| 麻豆国产欧美一区二区三区| 2021狠狠干| 欧美sss在线视频| 国产欧美久久久久久| 中文字幕在线观看播放| 精品偷拍各种wc美女嘘嘘| 国产精品高清无码| 亚洲综合另类小说| 性猛交娇小69hd| 国产精品一色哟哟哟| 久激情内射婷内射蜜桃| 欧美精品一区二区三区中文字幕 | 波多野结衣家庭教师在线| 国产精品欧美日韩一区| 91手机视频在线观看| 国产三级电影在线播放| 色婷婷**av毛片一区| 国产成人无码www免费视频播放| 在线国产亚洲欧美| 欧美日韩一级大片| 国产亚洲综合av| 久草福利在线观看| 日韩中文字幕亚洲一区二区va在线| 一区二区三区三区在线| 欧美日韩破处| 91理论片午午论夜理片久久| 欧美a级在线观看| 久久久精品日本| 日韩在线无毛| 日韩丝袜美女视频| 亚洲精品国产精品乱码视色| 亚洲一区二区三区四区五区中文| 欧美老女人性生活视频| 成人美女在线观看| 污污视频网站在线| 手机精品视频在线观看| 九一国产精品视频| 欧美在线三级| 亚洲国产日韩欧美| 日韩美女国产精品| av一区观看| 电影一区中文字幕| 国产成人精品在线| 狠狠躁少妇一区二区三区| 欧美成人激情图片网| av在线免费观看网| 国产偷国产偷亚洲清高网站| 精品久久无码中文字幕| 欧美日韩视频不卡| 中文字幕在线观看视频免费| 图片区日韩欧美亚洲| 精国产品一区二区三区a片| 国产精品欧美经典| 成人免费无遮挡无码黄漫视频| 成人国产精品免费观看| 69久久精品无码一区二区 | 国产日韩欧美夫妻视频在线观看| 最近在线中文字幕| 68精品久久久久久欧美| 丁香花在线高清完整版视频| 米奇精品一区二区三区在线观看| 在线日本视频| 尤物yw午夜国产精品视频| 激情在线视频| 亚洲欧美日韩高清| 国产中文在线观看| 亚洲欧美日韩精品| 日韩亚洲视频在线观看| 精品爽片免费看久久| 午夜在线视频免费| 亚洲精品久久久久久下一站| 俄罗斯嫩小性bbwbbw| 亚洲第一精品福利| 亚洲人成色777777老人头| 日韩高清有码在线| 邻居大乳一区二区三区| 亚洲人成网站免费播放| 国产色在线 com| 一区二区亚洲精品国产| 在线观看精品一区二区三区| 日韩在线观看av| 国产精品刘玥久久一区| 久久99久久99精品免观看粉嫩 | 亚洲六月丁香色婷婷综合久久| 国产成人自拍网站| 亚洲资源中文字幕| 少妇一级淫片免费放中国 | 国产精品国产三级国产aⅴ中文| 日韩黄色中文字幕| 国产精品理论片| 在线免费看av网站| 亚洲成在线观看| 亚洲黄色激情视频| 欧美系列一区二区| 国产欧美日韩综合精品一区二区三区| 日韩一级高清毛片| 噜噜噜久久,亚洲精品国产品| 亚洲精品福利免费在线观看| 麻豆app在线观看| 少妇高潮久久久久久潘金莲| 黄色免费在线看| 欧美精品videossex性护士| 日本在线播放一二三区| 国产精品成人一区二区| 日韩一区二区三区高清在线观看| 国产一区二区三区免费不卡| 女厕嘘嘘一区二区在线播放 | 国产99re66在线视频| 欧美一级片免费在线| 国产一区二区三区影视| 成人动漫视频在线观看免费| 亚洲婷婷伊人| 看一级黄色录像| 亚洲综合丁香| 天堂av在线8| 99国产精品99久久久久久| 97精品在线播放| 婷婷开心激情综合| 一级黄色大片免费观看| 精品少妇一区二区三区| av在线二区| 91精品国产高清久久久久久久久| 日本精品另类| 福利视频一区二区三区| 日韩av在线中文字幕| 国产a级片网站| 九九视频精品免费| 国内精品久久99人妻无码| 亚洲色图欧美偷拍| 无码人妻精品一区二区三区不卡| 欧美一区二区不卡视频| 成人在线免费看| 欧美在线精品免播放器视频| 国产一区二区三区视频在线| 欧美日韩精品中文字幕一区二区| 欧美在线亚洲综合一区| 亚洲免费看av| 久久久久亚洲蜜桃| 久草中文在线视频| 欧美日韩精品是欧美日韩精品| 天堂中文在线官网| 欧美日本精品在线| 婷婷久久免费视频| 日本10禁啪啪无遮挡免费一区二区 | 国产精品视频一二三四区| 奇米888四色在线精品| 欧美深性狂猛ⅹxxx深喉| 伊人色综合久久天天人手人婷| 亚洲天堂中文字幕在线| 亚洲欧美另类在线观看| 白浆视频在线观看| 国产精品成人观看视频免费| 久久久五月天| 中文字幕 日韩 欧美| 国产精品久久一卡二卡| 波多野结衣一二区| 亚洲日韩欧美视频一区| 欧美一级鲁丝片| 精品一区在线播放| 亚洲黄色在线| 大尺度在线观看| 亚洲国产精品久久久男人的天堂| 国产www视频| 久久精品视频在线| 亚洲国产91视频| 一区二区在线不卡| 蓝色福利精品导航| 人人干在线观看| 在线播放国产精品二区一二区四区 | 18岁网站在线观看| 99久久久精品| 亚洲va在线观看| 在线观看亚洲区| 日本亚洲欧洲无免费码在线| 亚洲一区高清| 久久99国内精品| 麻豆国产尤物av尤物在线观看| 欧美一二三在线| 日韩123区| 久久狠狠久久综合桃花| 久久久久久久波多野高潮日日| 毛茸茸多毛bbb毛多视频| 色综合久久久久久久久久久| 国产一级免费在线观看| 国产精品自在线| 羞羞色午夜精品一区二区三区| 成人三级做爰av| 亚洲成人在线网站| 日本在线丨区| 成人a在线视频| 欧美激情性爽国产精品17p| 97精品人人妻人人| 精品久久久久久久久久ntr影视| 三级视频在线| 国产精品美女在线| 婷婷综合伊人| a级一a一级在线观看| 一本色道综合亚洲| 午夜伦全在线观看| 99久热re在线精品996热视频| 亚洲第一伊人| 久久日免费视频| 亚洲精品在线免费观看视频| 欧美13videosex性极品| 日韩在线导航| 成人精品鲁一区一区二区| 国产成人自拍偷拍| 久久91亚洲精品中文字幕奶水| 婷婷精品在线| 涩涩网站在线看| 欧美日韩国产一区二区三区| 永久免费av在线| 国产欧美欧洲| 麻豆成人91精品二区三区| 国产乡下妇女做爰毛片| 尤物九九久久国产精品的分类| 香蕉大人久久国产成人av| 国产精品欧美激情在线观看| 亚洲欧美日韩一区| 免费人成黄页在线观看忧物| 91精品视频大全| 视频在线观看一区| 久久久久成人网站| 丝袜美腿精品国产二区| 日本精品影院|