AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

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

用 Switch-case 來解決 Go 錯(cuò)誤處理的難題?

來源: 責(zé)編: 時(shí)間:2024-02-29 14:40:45 193觀看
導(dǎo)讀大家好,我是煎魚。在 Go 這門編程語言中,if err != nil 的錯(cuò)誤處理方式,是我們一直關(guān)注的焦點(diǎn)之一。所有的 Go 社區(qū)調(diào)查中,都有希望優(yōu)化和改進(jìn)錯(cuò)誤處理的聲音和各種想法。春節(jié)期間刷到了一個(gè)由 @Bill Soudan 提出的新提案

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

在 Go 這門編程語言中,if err != nil 的錯(cuò)誤處理方式,是我們一直關(guān)注的焦點(diǎn)之一。所有的 Go 社區(qū)調(diào)查中,都有希望優(yōu)化和改進(jìn)錯(cuò)誤處理的聲音和各種想法。J0y28資訊網(wǎng)——每日最新資訊28at.com

春節(jié)期間刷到了一個(gè)由 @Bill Soudan 提出的新提案《proposal: Go 2: support new form of switch statement during variable assignment which jumps to function-wide case blocks[1]》,是針對錯(cuò)誤處理優(yōu)化的,思路還是有些新奇的。J0y28資訊網(wǎng)——每日最新資訊28at.com

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

以往印象里沒有人提過這個(gè)方式。今天分享給大家,一起圍觀和學(xué)習(xí)!J0y28資訊網(wǎng)——每日最新資訊28at.com

新提案

該提案希望在變量賦值時(shí)能夠支持新的 switch 語句形式。從功能出發(fā),更具體指的是:要支持 switch 跳轉(zhuǎn)到函數(shù)范圍內(nèi)的任意位置的標(biāo)簽。J0y28資訊網(wǎng)——每日最新資訊28at.com

這個(gè)特性的目的是:簡化繁瑣又重復(fù)的 if err !=nil 的錯(cuò)誤檢查代碼,也可以用于其他邏輯實(shí)現(xiàn)。J0y28資訊網(wǎng)——每日最新資訊28at.com

具體的對比例子如下。J0y28資訊網(wǎng)——每日最新資訊28at.com

如果是原本的 Go1 錯(cuò)誤處理的范式。J0y28資訊網(wǎng)——每日最新資訊28at.com

代碼如下:J0y28資訊網(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 }}

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

基于本文提到的 switch-case 提案進(jìn)行改造。J0y28資訊網(wǎng)——每日最新資訊28at.com

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

func CopyFile(src, dst string) error { r, switch err := os.Open(src) defer r.Close() w, switch err := os.Create(dst) defer w.Close() _, switch dstErr := io.Copy(w, r) switch dstErr = w.Close() return nilcase dstErr != nil: os.Remove(dst) err = dstErr fallthroughcase err != nil: return fmt.Errorf("copy %s %s: %v", src, dst, err)}

注意幾個(gè)細(xì)節(jié)點(diǎn):J0y28資訊網(wǎng)——每日最新資訊28at.com

  • switch 關(guān)鍵字在對應(yīng)的 err 變量前作為聲明標(biāo)識。
  • case 關(guān)鍵字根據(jù)對應(yīng)的 err 變量,運(yùn)行不同的錯(cuò)誤處理邏輯。
  • switch-case 子句可以在同一函數(shù)內(nèi)的不同位置進(jìn)行調(diào)用。

這種 switch-case 的使用方式,從優(yōu)點(diǎn)來看。確實(shí)收攏了統(tǒng)一的錯(cuò)誤處理邏輯,減少了重復(fù)繁瑣的代碼量。J0y28資訊網(wǎng)——每日最新資訊28at.com

短短的代碼片段,看起來像那么一回事,能一定程度上滿足大家原始的訴求。J0y28資訊網(wǎng)——每日最新資訊28at.com

缺點(diǎn)的話,個(gè)人認(rèn)為會(huì)增加認(rèn)知和邏輯復(fù)雜度。你根本不知道 switch-case,這個(gè) case 他的準(zhǔn)確邏輯位置在哪里。J0y28資訊網(wǎng)——每日最新資訊28at.com

一旦有人套娃,就非常麻煩了。同時(shí) switch-case 延伸出多種不同的使用方式,會(huì)產(chǎn)生二義性,這是一個(gè)折騰的事情。J0y28資訊網(wǎng)——每日最新資訊28at.com

總結(jié)

今天給大家分享了我所看到的一個(gè) Go 錯(cuò)誤處理的新提案,其本質(zhì)上是利用 switch-case 的新語法機(jī)制,實(shí)現(xiàn)了 err 變量和 case 的關(guān)聯(lián)。以此簡化錯(cuò)誤檢查的邏輯。J0y28資訊網(wǎng)——每日最新資訊28at.com

軟件開發(fā)是沒有銀彈的。如何引入更優(yōu)雅的錯(cuò)誤處理機(jī)制,且不要帶過來過大的程序員心智負(fù)擔(dān),還要要確保編譯器性能尚可。Go 核心團(tuán)隊(duì)可能是想要在這三個(gè)圈里設(shè)計(jì)一個(gè)最優(yōu)的選擇。J0y28資訊網(wǎng)——每日最新資訊28at.com

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

[1]J0y28資訊網(wǎng)——每日最新資訊28at.com

proposal: Go 2: support new form of switch statement during variable assignment which jumps to function-wide case blocks: https://github.com/golang/go/issues/65019J0y28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-75316-0.html用 Switch-case 來解決 Go 錯(cuò)誤處理的難題?

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

上一篇: 在DDD集成支付寶支付,看這篇文章就夠了!

下一篇: 想徒手寫個(gè)文件系統(tǒng)?來一起呀

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 紅魔電競平板評測:大屏幕硬實(shí)力

    前言:三年的疫情因?yàn)橐暇W(wǎng)課的原因激活了平板市場,如今網(wǎng)課的時(shí)代已經(jīng)過去,大家的生活都恢復(fù)到了正軌,這也就意味著,真正考驗(yàn)平板電腦生存的環(huán)境來了。也就是面對著這種殘酷的
  • 7月安卓手機(jī)性能榜:紅魔8S Pro再奪榜首

    7月份的手機(jī)市場風(fēng)平浪靜,除了紅魔和努比亞帶來了兩款搭載驍龍8Gen2領(lǐng)先版處理器的新機(jī)之外,別的也想不到有什么新品了,這也正常,通常6月7月都是手機(jī)廠商修整的時(shí)間,進(jìn)入8月份之
  • 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 最新的生
  • 分布式系統(tǒng)中的CAP理論,面試必問,你理解了嘛?

    對于剛剛接觸分布式系統(tǒng)的小伙伴們來說,一提起分布式系統(tǒng),就感覺高大上,深不可測。而且看了很多書和視頻還是一臉懵逼。這篇文章主要使用大白話的方式,帶你理解一下分布式系統(tǒng)
  • 得物效率前端微應(yīng)用推進(jìn)過程與思考

    一、背景效率工程隨著業(yè)務(wù)的發(fā)展,組織規(guī)模的擴(kuò)大,越來越多的企業(yè)開始意識到協(xié)作效率對于企業(yè)團(tuán)隊(duì)的重要性,甚至是決定其在某個(gè)行業(yè)競爭中突圍的關(guān)鍵,是企業(yè)長久生存的根本。得物
  • 學(xué)習(xí)JavaScript的10個(gè)理由...

    作者 | Simplilearn編譯 | 王瑞平當(dāng)你決心學(xué)習(xí)一門語言的時(shí)候,很難選擇到底應(yīng)該學(xué)習(xí)哪一門,常用的語言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • 回歸OPPO兩年,一加贏了銷量,輸了品牌

    成為OPPO旗下主打性能的先鋒品牌后,一加屢創(chuàng)佳績。今年618期間,一加手機(jī)全渠道銷量同比增長362%,憑借一加 11、一加 Ace 2、一加 Ace 2V三款爆品,一加
  • 質(zhì)感不錯(cuò)!OPPO K11渲染圖曝光:旗艦IMX890傳感器首次下放

    一直以來,OPPO K系列機(jī)型都保持著較為均衡的產(chǎn)品體驗(yàn),歷來都是2K價(jià)位的明星機(jī)型,去年推出的OPPO K10和OPPO K10 Pro兩款機(jī)型憑借各自的出色配置,堪稱有
  • 三翼鳥智能家居亮相電博會(huì),讓用戶體驗(yàn)更真實(shí)

    2021電博會(huì)在青島國際會(huì)展中心開幕中,三翼鳥直接把“家”搬到了現(xiàn)場,成為了展會(huì)的一大看點(diǎn)。這也是三翼鳥繼9月9日發(fā)布了行業(yè)首個(gè)一站式定制智慧家平臺后的
Top