首頁 >常見問題 >Java 有沒有必要轉 Go 語言?

Java 有沒有必要轉 Go 語言?

Guanhui
Guanhui原創
2020-06-04 15:34:577862瀏覽

Java 有沒有必要轉 Go 語言?

Java 有沒有必要轉換 Go 語言?

可以根據情況來看是否有必要轉換Go語言,如果對Go語言感興趣,並且條件允許推薦轉換Go語言,Go語言是一種靜態強類型、編譯型語言,不僅語法比Java簡潔,而且效能比Java更好,編譯速度更快。

Go

在並發方面, goroutine 和channel 機制提供了語言層面的輕量級和毫無拖泥帶水的並發機制;在性能方面,提供了不弱於Java 的表現(效能是個偽命題),而記憶體資源消耗方面,相對Java 和其它動態語言,具備明顯的優勢;在語法方面,具備了部分Python 的動態語言特性,在物件初始化、構造和序列化等方面提供了無比簡潔的表述方式,而這些處理代碼可能佔據10%~50% 的代碼分量,尤其對於處理資料、配置和協議映射場景,相比C、C 、Java 在此方面拙笨,這就是動態語言為何讓人著迷的關鍵。

這也是為啥Go 語言第一個版本發佈時就如此受人矚目的關鍵所在,尤其是對於動態語言來說,它提供了動態語言所不具有的並發與性能優勢,Pike設計Go 語言目的是想作為C/C 的另一個可選的角色(注意不是替換,其設計目標不是替換),Go 語言之父Google 首席軟體工程師Pike 2012 年“大道至簡”演講稿中對於此目標充滿沮喪,引用其中一句話:「Although we expected C programmers to see Go as an alternative, instead most Go programmers come from languages like Python and Ruby. Very few come from C .」 C 的價值精髓在於:語言提供更加精髓在於:語言提供更加精髓在於廣泛的抽象、優雅和靈活的特性,而這些表達能力是硬體零成本的,而C 語言一開始就把硬體零成本作為其設計目的,但語言表述力是C 來解決,Go 思考的方向顯然不是零成本,至少不是零CPU 成本,Go 的主張更多考慮的是最小化程式設計師的工作量。

一個是硬體零成本的極致追求,一個是最小化程式設計師的工作量,誰都替換不了誰最有價值的部分,Go 無法同時符合兩個目標,它選擇了動態語法和gc,就注定了它選擇開發效率,會為開發效率犧牲硬體效率,所以它走向另外一個方向,也就是Java 所擅長的應用方向,尤其是目前的網絡和HTPP 應用方面,這就需要有良好的標準庫和生態系統支持,而在標準庫方面,Go 已提供了處理tcp/http/xml/json/ 加解密等更輕量級和優秀的代碼庫,對網絡的核心協議http 的高並發支持,已經為它提供了撬動Java 的敲門磚。

但是我們必須面對它目前的不足,在其語言重要特性和嚴謹性方面還遠未成熟,還有不少斷層或臨時解決方案,而這也會影響到其生態的成熟度,這些問題還需要在新版本中解決。 Go 語言2012 年3 月28 日正式發布第一個版本,截止目前1.7 版本發布,差不多一年兩個大版本發布,中間還有數個beta 與RC 版本發布,這也基本能說明Go 語言還未完全準備好。

小結

Go 已證明在動態語言需要效能方面,是作為Python 和Ruby 的理想候選者;在應用開發方面,尤其是HTTP 相關應用方面,目前已經是站在Java 面前的一位挑戰者,同時在對資源的掌控力不是那麼強烈訴求的地方也是C/C 之外提供另一個角色。

在生產力方面,其語言特性和生態系統還未成熟,版本還在快速迭代中,相較於動態語言和Java,並不具有優勢,目前階段是這些語言在某些場景下的可選角色。長期看,在Google 的鼎力支持下,新特性和庫的應用能力還會不斷加入,是一門欣欣向榮的程式語言,但目前階段,建議必須控制好程式的規模和複雜度,語言和生態還未提供健全的支撐,同時也必須留意它的不成熟和版本快速迭代所帶來的風險。

Java

#

Java 的成功得益於10 年前以Unix 系統為主的SUN、IBM、Oracle 等大型公司的強力支持,這讓它在企業應用領域和WEB 應用方面站穩了腳跟,而隨後的10年,前半段是靠x86 Linux 帶來的革命繼續保持份額,後半段就是android 的成功讓其在步履蹣跚停止腳步後再一次登頂。這二十年,Java 累積了最強大的生態系統,你可以說它無所不包, 毋庸置疑,Java 早已是一艘航空母艦的巨大身軀,這足已證明它的地位與成功。但其語言、函式庫、框架和生態系統的複雜度,對技術人員構築其巨大的障礙,例如並發方面,語言的synchronized 機制,標準庫的notify 再到concurrent,也可以透過Apache tomcat 容器來獲得HTTP 等的並,而基於JVM 技術,Java 又與其它語言具有良好的互通性,例如並發方面的Scala,可以選擇其Actor 或者也是用Scala 寫的Akka,當然業界選擇nginx 等混搭的場景更多,太多太多…

這就是Java 的世界,永遠不會太多,不需要重複造車馬,這是Java 成功的關鍵所在,歷史沉澱的,讓Java 提供的選項太多,深入後就知道Java 的學習成本比C 更高,對程式設計師的要求比C 更高,除非掉隊了,還在用7 年甚至10 年前的Java 技術,技術人員要非常精心地組織框架和設計,否則各種複用的結果就是堆砌出一個異常臃腫的程序,其運行時對資源的消耗有時會讓你感到恐懼,而這是太多的基於Java 所開發的平台被廣泛詬病的關鍵所在,重用是個雙面刃,需要量體裁衣而不是一鍋端,拿捏的尺度對開發人員要求無疑是最高昂的,除非語言和標準庫提供了最好最直接的選項。

推薦教學:《Go教學》《Java教學

以上是Java 有沒有必要轉 Go 語言?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn