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

為什么我不會舍棄Python投奔Go語言

開發 開發工具 前端
作者Russ Cox畢業于麻省理工和哈佛大學,曾在貝爾實驗室參與過Plan 9 和 Unix操作系統的開發,最近在google,主要開發Go語言。最近關于Go語言的話題很多,本月剛好是Go語言誕生3周年。這個語言在谷歌巨人的推動下最終很可能成為今后的主流語言。

最近,由于一篇“為什么我不會舍棄Python投奔Go語言(英文)”的博客,我收到了大量的郵件,這篇文章中,作者說Go語言除了“用返回值來處理異常錯誤”這點外,其它的都非常好。我想寫出一點東西,解釋一下Go語言為什么這樣做,這會對大家都有用。

[[103021]] 
本文作者:Russ Cox

在Go語言中,規定的方式是,函數返回錯誤信息。這沒什么。如果一個文件并不存在,op.Open函數會返回一個錯誤信息。這沒什么。如果你向你一個中斷了的網絡連接里寫數據,net.Conn里的Write方法會返回一個錯誤。這沒什么。這種狀況在這種程序中是可以預料到的。這種操作就是容易失敗,你知道程序會如何運行,因為API的設計者通過內置了一種錯誤情況的結果而讓這一切顯得很清楚。

從另一方面講,有些操作基本上不會出錯,所處的環境根本不可能給你提示錯誤信息,不可能控制錯誤。這才是讓人痛苦的地方。典型的例子;一個程序執行 x[j],j值超出數組邊界,這才痛苦。像這樣預料之外的麻煩在程序中是一個嚴重的bug,一般會弄死程序的運行。不幸的是,由于這種情況的存在,我們很難寫出健壯的,具有自我防御的服務器——例如,可以應付偶然出現的有bug的HTTP請求處理器時,不影響其他服務的啟動和運行。為解決這個問題,我們引入了恢復機制,它能讓一個go例程從錯誤中恢復,服務余下設定的調用。然而,代價是,至少會丟失一個調用。這是特意而為之的。引用郵件中的原話:“這種設計不同于常見的異常控制結構,這是一個認真思考后的決定。我們不希望像java語言里那樣把錯誤和異常混為一談。”

我剛開始提到的那篇文章里問“為什么數組越界造成的麻煩會比錯誤的網址或斷掉的網絡引出的問題要大?”答案是,我們沒有一種內聯并行的方法來報告在執行x[j]期間產生的錯誤,但我們有內聯并行的方法報告由錯誤網址或網絡問題造成的錯誤。

使用Go語言中的錯誤返回模式的規則很簡單:如果你的函數在某種情況下很容易出錯,那它就應該返回錯誤。當我調用其它的程序庫時,如果它是這樣寫的,那我不必擔心那些錯誤的產生,除非有真正異常的狀況,我根本沒有想到需要處理它們。

有一個你需要記在心里的事情是,Go語言是為大型軟件設計的。我們都喜歡程序簡潔清晰,但對于一個由很多程序員一起開發的大型軟件,維護成本的增加很難讓程序簡潔。異常捕捉模式的錯誤處理方式的一個很有吸引力的特點是,它非常適合小程序。但對于大型程序庫,如果對于一些普通操作,你都需要考慮每行代碼是否會拋出異常、是否有必要捕捉處理,這對于開發效率和程序員的時間來說都是非常嚴重的拖累。我自己做開發大型Python軟件時感受到了這個問題。 Go語言的返回錯誤方式,不可否認,對于調用者不是很方便,但這樣做會讓程序中可能會出錯的地方顯的很明顯。對于小程序來說,你可能只想打印出錯誤,退出程序。對于一些很精密的程序,根據異常的不同,來源的不同,程序會做出不同的反應,這很常見,這種情況中,try + catch的方式相對于錯誤返回模式顯得冗長。當然,Python里的一個10行的代碼放到Go語言里很可能會更冗長。畢竟,Go語言主要不是針對10行規模的程序的。

就是要說明這一點:Go語言程序員認為,把error作為一種內置的類型是非常重要的。

附言

有時,你會發現,一種非本地的goto語句被當作錯誤恢復的方法,就像C語言里的longjmp 和 setjmp。這也不錯,但***只在內部用。如果調用者需要知道錯誤恢復的走向,那你的這種方式就不好了。

 

英文原文:Why Im not leaving Python for Go

譯文鏈接:http://www.aqee.net/response-to-why-im-not-leaving-python-for-go/

責任編輯:林師授 來源: 外刊IT評論
相關推薦

2020-09-04 15:34:07

C編程語言開發

2020-04-07 16:12:56

Go編程語言開發

2018-06-15 21:26:13

PythonCrystal語言

2024-01-02 10:38:22

Go語言數組

2018-05-02 12:34:48

2016-09-27 21:25:08

Go語言Ken Thompso

2019-11-18 09:56:48

谷歌Go語言開發者

2011-10-14 09:20:48

Lisp

2023-03-06 08:01:25

structGo語言

2022-01-17 16:09:43

Go語言開發

2012-05-19 22:17:30

Android

2025-07-01 07:37:27

2021-02-09 20:51:13

D 語言腳本編程語言

2012-06-18 14:51:09

Python

2021-12-21 06:09:05

Python切片索引

2022-01-10 23:54:56

GoMap并發

2014-12-26 09:56:50

編程語言

2019-10-12 10:18:35

代碼開發Go

2013-08-23 14:22:45

SA系統管理員運維

2015-07-22 16:46:13

Windows 11理由
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一级a性色生活片久久毛片 午夜精品在线观看 | 国产日韩视频在线 | 久久一区二区精品 | 欧美日韩国产在线 | 日本精品久久 | 婷婷综合网 | 蜜臀久久 | 国产成人精品一区二区三区四区 | 日韩激情视频一区 | 色999日韩| 在线国产欧美 | 日韩色视频 | 成人午夜电影在线观看 | 中文字幕在线观看视频网站 | 一区二区三区电影在线观看 | 三级黄色片在线观看 | 色偷偷噜噜噜亚洲男人 | 夜夜操天天操 | 日韩区 | 91爱爱·com | 美女一级a毛片免费观看97 | 国产精品视频www | 国产精品国产三级国产aⅴ无密码 | www国产精 | 日日干夜夜操天天操 | 一级a毛片 | 国产中文字幕av | 精品一区二区三区91 | 亚洲人精品午夜 | 中文字幕精品一区二区三区精品 | 国产欧美在线 | 免费v片在线观看 | 成人亚洲视频 | 精品欧美一区二区久久久伦 | 亚洲午夜一区二区 | 黑人巨大精品欧美一区二区免费 | 欧美精品网| 国产精品久久午夜夜伦鲁鲁 | 性一交一乱一透一a级 | 香蕉av免费 | 日韩三级免费网站 |