自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

谷歌軟件工程師:我為什么喜歡用Go語言?

新聞 前端
Go語言最近幾年逐漸獲得越來越多的開發(fā)者的喜歡。在Go社區(qū)前不久剛剛慶祝Go誕生10周年生日之際,谷歌云軟件工程師Benjamin Congdon發(fā)表個人博客,表達了自己對Go倍加青睞的一些原因。

 Go語言最近幾年逐漸獲得越來越多的開發(fā)者的喜歡。在Go社區(qū)前不久剛剛慶祝Go誕生10周年生日之際,谷歌云軟件工程師Benjamin Congdon發(fā)表個人博客,表達了自己對Go倍加青睞的一些原因。他表示,“簡潔”是他喜歡使用Go語言最重要的原因。

 

以下是博客內容:

[[282629]]

我使用Go已經好幾年了,我最欣賞Go的一點就是它的簡潔性。我在幾個月前開始在工作中使用Go寫代碼,發(fā)現它真的很容易實現迭代,比Python和Java更為復雜的迭代。

當Go社區(qū)慶祝10歲生日時,我一直在想,是什么使Go變得如此與眾不同。我認為Go的許多真正力量來自其設計師的理念:高度強調前向兼容性,該語言沒有損害可讀性的特性,并且隨手可得。它提供了用戶真正需要的一切(基本測試庫,可靠的聯網、同步原語以及模板等)。

 

前向兼容性有多高、版本依賴性就有多低

 

我認為,和其它語言相比,Go具有最完善的版本控制和依賴關系。我沒有因為Go的版本更新遇到任何損失。這一點很重要。在差不多的時間段內,由于Rust的API更改,臭名昭著的Python 2到3過渡,我的項目一度陷入了中斷。坦率地說,我覺得npm升級后的任何舊JS項目能不能延續(xù)都不好說。

借助Go,我注意到Go的庫趨于穩(wěn)定。在Python和JavaScript中,如果有3年未更新的庫,則表明該庫已死。而在Go生態(tài)系統中,這個庫可能仍然可以使用。在其他社區(qū)中被視為停滯或忽視的事物,在Go這里反而是復興的標志。

在Go中,我需要的依賴項更少,而依賴項本身的依賴項也更少。Go沒有將更多的邏輯導出到外部依賴項習慣。Go社區(qū)中也更容易接受代碼重復。有時這一點可能令人沮喪。有時你可能只想要一個執(zhí)行某種類型的環(huán)境或分析的庫。很多時候,你需要自己動手編寫,或者從StackOverflow答案中去尋找。不過總的來說,我認為這一點還是利大于弊。更少的依賴項意味著項目閑置幾個月之后被迫中斷的可能性更低。

不過,現在下結論可能對其他編程語言有點不公平。Rust尚未達到Go所具有的穩(wěn)定性,這可能是因為Rust還不是一種成熟的語言,但也正朝著逐步成熟方向發(fā)展。Python 3本身是向前兼容的,我希望Python核心開發(fā)人員能從中學到一些教訓。在這方面,我對Javascript已經不抱什么希望了。

Go的依附系統也不是沒有問題。盡管GoModules很棒,但社區(qū)仍未達到100%的采用率。在使用GoModules之前,將所有內容保存在$ GOPATH下的要求是如此煩人,以至于我推遲了多年才開始使用Go?,F在情況已經好轉,開始顯示出逐步改善的跡象。

就向前兼容性而言,Go保證自Go 1發(fā)布以來編寫的所有Go代碼都可以工作到Go 2,直到將來某個不確定的時刻。這是一個強力的承諾,至少到目前為止,我對這種語言的使用體驗還是非常積極的。

一些功能雖然現在不需要,以后可能很想要

[[282630]]

在使用Go一段時間后,我開始想要一些Go語言根本不支持的額外功能。嗯,我對C ++模板的排斥程度不亞于任何一個人,但是擁有基本的集合類泛型這個要求也不過分,對吧? 

具備“開箱即用”的僅有的兩個通用化數據結構是數組(slice)和字典(map)。那是否要編寫自己的數據結構呢?要么必須針對特定類型進行設置,要么需要盯著一個全是界面的字段{}。這兩種方法都各有所長,但有時候,我希望我可以只導入類型安全的、通用的、雙向map。

Go將“不需要”發(fā)揮到了極致。“需要”是這里的重點詞。你將“不需要”泛型,但幾乎可以肯定會需要它們。它在錯誤處理,功能編程和運算符重載上都是上上之選。

那句“陳詞濫調”怎么說來著?有時“少即是多”。除了命名的返回值之外,我想不出Go語言中的任何讓用戶抓狂的功能了。令人印象深刻的是,Go核心開發(fā)人員對在Go中模仿其他語言的開發(fā)人員群體表現出了極大了約束。Go 2的未來對我來說真的很令人興奮,因為我很期待看到已經習慣的“下一代” Go是什么樣子。

對于Go令人贊嘆的另一點是,它提供了幾乎所有你需要的東西。

go test是一個很好的基礎測試框架。你無需成為JUnit的領域專家,也無需在單元測試類型之間進行選擇。同樣,Go的同步功能涵蓋了你需要的大多數同步原語,http可以提供可用于生產環(huán)境的HTTP服務器和客戶端(甚至支持HTTP2),而且編碼包中有足夠多的工具可以處理json,xml,csv,以及許多其他常見格式的數據。

 

格式化,格式化,格式化,重要的事情說三遍

 

最后必須說到gofmt。在格式化方面,我有點挑剔。我并不特別在乎應用哪些規(guī)則,但是我非常在乎一致性。Go的內部格式化工具gofmt被社區(qū)廣泛采用,并提供了足夠的一致性,使Go的代碼“看起來”很用的慣,而不會看代碼看得要抓狂。

就我個人而言,我發(fā)現使用gofmt可以輕松閱讀開源Go代碼。盡管每個項目都有自己的處理方式,但是每個項目都遵循相同的格式約定。從美學上講,這讓人愉悅。

所以,我喜歡Go。曾經有一段時間,我被Python的Zen迷住了,并且對其他語言嗤之以。但現在,我期待Go的美好未來。我可能以后會在Rust流行起來之后,去用Rust趕一波時髦,因為我確實喜歡一些類似于函數式的編程。

但是現在,我非常愿意繼續(xù)使用Go語言。

責任編輯:張燕妮 來源: 新智元
相關推薦

2011-05-17 10:48:30

軟件程序員

2011-05-17 09:25:33

軟件工程師

2009-06-23 08:25:50

谷歌離職

2013-03-22 10:55:06

Go

2017-11-21 12:03:20

軟件工程師開發(fā)代碼

2022-01-16 07:12:30

軟件工程師吵架開發(fā)

2020-08-28 13:20:53

谷歌Android開發(fā)者

2009-02-11 13:15:54

軟件工程師女工程師google

2012-04-04 22:07:12

Android

2012-08-27 09:40:07

2014-09-05 13:37:29

程序員

2020-03-16 14:25:57

軟件開發(fā) 經驗

2017-11-09 14:12:44

大數據軟件工程師算法工程師

2023-06-05 10:07:13

軟件工程平臺工程師

2022-04-18 10:13:32

軟件開發(fā)寫作

2022-07-29 09:12:44

軟件硬件開發(fā)

2020-01-23 15:49:42

區(qū)塊鏈技術智能

2009-06-01 09:03:23

中興軟件工程師征友

2019-09-02 22:34:48

2009-02-12 14:45:17

軟件工程師
點贊
收藏

51CTO技術棧公眾號