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

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

Go 錯(cuò)誤處理:用 select-case 來解決這個(gè)歷史難題?

來源: 責(zé)編: 時(shí)間:2024-03-18 09:42:23 180觀看
導(dǎo)讀大家好,我是煎魚。日???Go 社區(qū)的一些新動(dòng)態(tài),發(fā)現(xiàn)大家對(duì)于錯(cuò)誤處理的新提案是很積極。上次分享了一篇想要用 switch-case 來解決現(xiàn)狀的新提案,不少同學(xué)認(rèn)為不可行。沒想到 Go 社區(qū)的同學(xué)腦洞還是很大的,這幾天又整出來

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

日???Go 社區(qū)的一些新動(dòng)態(tài),發(fā)現(xiàn)大家對(duì)于錯(cuò)誤處理的新提案是很積極。上次分享了一篇想要用 switch-case 來解決現(xiàn)狀的新提案,不少同學(xué)認(rèn)為不可行。HV828資訊網(wǎng)——每日最新資訊28at.com

沒想到 Go 社區(qū)的同學(xué)腦洞還是很大的,這幾天又整出來個(gè) select-case 的新提案的方式來解決錯(cuò)誤處理。HV828資訊網(wǎng)——每日最新資訊28at.com

今天基于此給大家分享一下社區(qū)里的新腦洞。HV828資訊網(wǎng)——每日最新資訊28at.com

快速背景

本節(jié)的背景主要是給不了解的同學(xué)拉通一下。如果已經(jīng)知道的可以跳過本節(jié)。新提案的提出背景,與之前的類似。HV828資訊網(wǎng)——每日最新資訊28at.com

社區(qū)內(nèi)的 Go 開發(fā)者很多嫌棄 if err != nil 的錯(cuò)誤處理方式過于繁瑣,紛紛提出各種改進(jìn)方式和新提案。截至目前暫無大改進(jìn)被通過。HV828資訊網(wǎng)——每日最新資訊28at.com

具體演示代碼如下:HV828資訊網(wǎng)——每日最新資訊28at.com

func CopyFile(src, dst string) error { r, err := os.Open(src) if err != nil {  return err } defer r.Close() w, err := os.Create(dst) if err != nil {  return err } defer w.Close() if _, err := io.Copy(w, r); err != nil {  return err } if err := w.Close(); err != nil {  return err } // 和煎魚一起煎個(gè)魚...}

要寫比較多的判斷和返回錯(cuò)誤的邏輯,并且這些代碼比正式的調(diào)用代碼還要多。所以也常被人戲稱一個(gè) Go 工程里 80% 都是 if err != nil 等錯(cuò)誤檢查代碼。HV828資訊網(wǎng)——每日最新資訊28at.com

新提案

本次新提案是由 @bjorndm 提出的 《proposal: Go 2: add trap on direct assignment with select block[1]》:HV828資訊網(wǎng)——每日最新資訊28at.com

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

提出者本身使用編程語言的經(jīng)驗(yàn)比較豐富,用過:C, Ruby, Pascal, Basic, Java, Shell 等。本次提出該提案的原因是某些 shell 中 trap 語句的啟發(fā)。HV828資訊網(wǎng)——每日最新資訊28at.com

抽象了一下,提案內(nèi)容如下:HV828資訊網(wǎng)——每日最新資訊28at.com

  1. 功能上是要擴(kuò)展 select 關(guān)鍵字的語法,允許在 select 關(guān)鍵字和其代碼塊之間放一個(gè)單獨(dú)的變量,這會(huì)在變量上安裝一個(gè) “陷阱”(類似觸發(fā)器)。
  2. 這個(gè) “陷阱” 是關(guān)鍵點(diǎn),當(dāng)任何值被賦給該變量時(shí)將會(huì)觸發(fā)。然后在 select 代碼塊的主體中,case 語句可用于檢查變量的值。

從原作者的描述來看,提案內(nèi)容比較生硬。我們結(jié)合演示代碼來看就知道,他是想構(gòu)思什么新語法來使用 select-case 達(dá)到錯(cuò)誤處理的目的了。HV828資訊網(wǎng)——每日最新資訊28at.com

演示代碼如下:HV828資訊網(wǎng)——每日最新資訊28at.com

func CanFail(name string) error {var err errorselect err {      case err != nil:          return fmt.Errorf("CanFail: %w", err)}fin, err := os.Open(name)buf, err := io.ReadAll(fin)return nil}

結(jié)合新提案的語法,由于 select 代碼塊中是一個(gè)變量,符合新語法 “陷阱” 的場景。HV828資訊網(wǎng)——每日最新資訊28at.com

因此 err 變量被安裝了 “陷阱”,當(dāng)后面的 os.Open 和 io.ReadAll 等方法賦值給 err 變量時(shí),就能觸發(fā) select 子句的 case 檢查。HV828資訊網(wǎng)——每日最新資訊28at.com

最終以此達(dá)到簡化 if err != nil 的目的。也可以滿足 Go1 兼容性保障,達(dá)到向前和向后兼容,不需要新增關(guān)鍵字。HV828資訊網(wǎng)——每日最新資訊28at.com

總結(jié)

截止目前我們已經(jīng)看過了許多 Go 錯(cuò)誤處理的腦洞新提案。本提案是期望利用 select-case 的特性結(jié)構(gòu)來做擴(kuò)展,以此達(dá)到向前兼容的目的。HV828資訊網(wǎng)——每日最新資訊28at.com

從編譯和運(yùn)行上,作者認(rèn)為代價(jià)是比較小的,只需要在內(nèi)部替換成類似 switch 的效果就可以了。HV828資訊網(wǎng)——每日最新資訊28at.com

參考資料HV828資訊網(wǎng)——每日最新資訊28at.com

[1]proposal: Go 2: add trap on direct assignment with select block: https://github.com/golang/go/issues/66161HV828資訊網(wǎng)——每日最新資訊28at.com

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

本文鏈接:http://www.www897cc.com/showinfo-26-76540-0.htmlGo 錯(cuò)誤處理:用 select-case 來解決這個(gè)歷史難題?

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

上一篇: 贈(zèng)你13張圖,助你20分鐘打敗了「V8垃圾回收機(jī)制」?。。?/a>

下一篇: Sharding-JDBC源碼解析與vivo的定制開發(fā)

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 6月iOS設(shè)備好評(píng)榜:第一蟬聯(lián)榜首近一年

    作為安兔兔各種榜單里變化最小的那個(gè),2023年6月的iOS好評(píng)榜和上個(gè)月相比沒有任何排名上的變化,僅僅是部分設(shè)備好評(píng)率的下降,長年累月的用戶評(píng)價(jià)和逐漸退出市場的老款機(jī)器讓這
  • 2023 年的 Node.js 生態(tài)系統(tǒng)

    隨著技術(shù)的不斷演進(jìn)和創(chuàng)新,Node.js 在 2023 年達(dá)到了一個(gè)新的高度。Node.js 擁有一個(gè)龐大的生態(tài)系統(tǒng),可以幫助開發(fā)人員更快地實(shí)現(xiàn)復(fù)雜的應(yīng)用。本文就來看看 Node.js 最新的生
  • 從零到英雄:高并發(fā)與性能優(yōu)化的神奇之旅

    作者 | 波哥審校 | 重樓作為公司的架構(gòu)師或者程序員,你是否曾經(jīng)為公司的系統(tǒng)在面對(duì)高并發(fā)和性能瓶頸時(shí)感到手足無措或者焦頭爛額呢?筆者在出道那會(huì)為此是吃盡了苦頭的,不過也得
  • 零售大模型“干中學(xué)”,攀爬數(shù)字化珠峰

    文/侯煜編輯/cc來源/華爾街科技眼對(duì)于絕大多數(shù)登山愛好者而言,攀爬珠穆朗瑪峰可謂終極目標(biāo)。攀登珠峰的商業(yè)路線有兩條,一是尼泊爾境內(nèi)的南坡路線,一是中國境內(nèi)的北坡路線。相
  • 2納米決戰(zhàn)2025

    集微網(wǎng)報(bào)道 從三強(qiáng)爭霸到四雄逐鹿,2nm的廝殺聲已然隱約傳來。無論是老牌勁旅臺(tái)積電、三星,還是誓言重回先進(jìn)制程領(lǐng)先地位的英特爾,甚至初成立不久的新
  • 三星獲批量產(chǎn)iPhone 15全系屏幕:蘋果史上最驚艷直屏

    按照慣例,蘋果將繼續(xù)在今年9月舉辦一年一度的秋季新品發(fā)布會(huì),有傳言稱發(fā)布會(huì)將于9月12日舉行,屆時(shí)全新的iPhone 15系列將正式與大家見面,不出意外的話
  • 三星Galaxy Z Fold5官方渲染圖曝光:13.4mm折疊厚度依舊感人

    據(jù)官方此前宣布,三星將于7月26日在韓國首爾舉辦Unpacked活動(dòng),屆時(shí)將帶來帶來包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy Z Flip 5、
  • iQOO Neo8 Pro搶先上架:首發(fā)天璣9200+ 安卓性能之王

    經(jīng)過了一段時(shí)間的密集爆料,昨日iQOO官方如期對(duì)外宣布:將于5月23日推出全新的iQOO Neo8系列新品,官方稱這是一款擁有旗艦級(jí)性能調(diào)校的作品。隨著發(fā)布時(shí)
  • “買真退假” 這種“羊毛”不能薅

    □ 法治日?qǐng)?bào) 記者 王春   □ 本報(bào)通訊員 胡佳麗  2020年初,還在上大學(xué)的小東加入了一個(gè)大學(xué)生兼職QQ群。群主“七王”在群里介紹一些刷單賺
Top 主站蜘蛛池模板: 阿巴嘎旗| 柯坪县| 明溪县| 安新县| 衡东县| 汕尾市| 丁青县| 潜江市| 诸城市| 五大连池市| 麦盖提县| 仙居县| 渭南市| 泽州县| 固安县| 丰都县| 白沙| 龙州县| 西林县| 靖宇县| 华容县| 海门市| 昌邑市| 普安县| 绥德县| 长乐市| 九江市| 开远市| 勐海县| 叶城县| 杭锦后旗| 鹤山市| 张家口市| 从化市| 资源县| 九台市| 北碚区| 洪雅县| 分宜县| 巴中市| 津南区|