天天看點

主流程式員的絕佳選擇?三個選擇使用 Go 語言的理由

幾個星期前,我一個朋友問我:“為什麼要關心 go 語言”? 因為他們知道我熱衷于 go 語言,但他們想知道為什麼我認為其他人也應該關心。本文包含三個我認為 go 是重要的程式設計語言的原因。

安全

個人而言,你和我或許完全有能力在 c 中編寫程式,既不會洩漏記憶體,也不會不安全地重複使用記憶體。然而,整體上,即使有超過 40 年的經驗,用 c 的程式員也無法可靠地這樣做。

盡管靜态代碼分析、valgrind、tsan 以及 “-werror” 已經存在了幾十年,卻很少有證據表明這些工具被廣泛認可,更不用說廣泛采用。總而言之,事實表明,程式員根本無法安全地管理自己的記憶體。現在是離開 c 的時候了。

go 不需要程式員直接管理記憶體,所有記憶體配置設定都由語言運作時自行管理,使用前初始化,必要時檢查邊界。它肯定不是提供這些安全保障的第一個主流語言,java(1995)可能是該冠軍的競争者。關鍵是,世界對不安全的程式設計語言沒有胃口,是以人們預設認為,go 是記憶體安全的。

開發人員生産力

從 20 世紀 70 年代末,開發人員的時間變得比硬體所耗費的時間更昂貴了。開發人員的生産力是一個不斷擴充的話題,但它歸結為這一點:你花了多少時間做有用的工作,又有多少時間等待編譯器或者失望地迷失在外部代碼庫中。

有個笑話說 go 是在等待 c ++ 程式編譯時開發的。快速編譯是 go 的一個重要功能,也是吸引新開發人員的關鍵工具。雖然編譯速度仍然是一個永久的戰場,但公平地說,在其他語言中需要幾分鐘的編譯,在 go 中隻需要幾秒鐘。

go 程式員意識到生産力的更根本的問題是代碼是為了讀而寫的,是以将代碼的閱讀行為放在編寫之上。go 通過工具和自定義來強制所有代碼格式化成特定的樣式。這消除了學習項目特定語言的方言時的困難,并有助于發現錯誤,因為它們看上去就是不正确。

由于專注于分析和機器輔助,go 開發人員開始采用越來越多的工具來發現常見的編碼錯誤,這種工具從來沒有在 c 語言開發者中産生共鳴 - go 開發人員希望工具幫助他們保持代碼清潔。

并發性

十多年來,晶片設計師一直在警告免費午餐将會結束。從最低端的手機到最耗電的伺服器,硬體的并行性以更多、更慢、堆砌 cpu 核心的形式出現,但隻有當你的語言可以利用它們才有意義。是以,并發特性需要内置到我們編寫的要在今天的硬體上運作的軟體中。

通過提供一種基于協程的輕量級并發模型,或者是 go 中已知的 goroutines,go 超越了那些暴露作業系統的多程序或多線程并行模型的語言。goroutines 允許程式員避開複雜的回調,而語言運作時確定有足夠的線程來保持你的核心的活躍。

總結

我給朋友推薦 go 有三個原因:安全性、生産力和并發性。有些語言可以涵蓋一個也有可能是兩個方面,但是這三個方面的結合使得 go 成為主流程式員的絕佳選擇。