前言
2017.10,作爲 Go 語言的三位創始人之一,Unix 老牌黑客
羅勃·派克(Rob Pike)
在新文章“Go: Ten years and climbing
”中,回顧了一下 Go 語言的發展過程。其中提到,Go 語言這十年的迅猛發展大到連他們自己都沒有想到,並且還成爲了雲計算領域中新一代的開發語言。還提到中國程序員對 Go 語言的熱愛完全超出了他們的想象,甚至他們都不敢相信是真的。Go 語言和 Docker 這兩種技術已經成爲新一代的雲計算技術,而且可以看到其發展態勢非常迅猛。而中國也成爲了像美國一樣在強力推動這兩種技術的國家。這的確是一件讓人感到非常高興的事,因爲中國在跟隨時代潮流這件事上已經做得非常不錯了。
- 對Go 語言的瞭解
第一,語言簡單,上手快。Go 語言的語法特性簡直是太簡單了,簡單到你幾乎玩不出什麼花招,直來直去的,學習曲線很低,上手非常快。
第二,並行和異步編程幾乎無痛點。Go 語言的 Goroutine
和 Channel
這兩個神器簡直就是併發和異步編程
的巨大福音。像 C、C++、Java、Python 和 JavaScript 這些語言的併發和異步方式
太控制就比較複雜了,而且容易出錯,而 Go 解決這個問題非常地優雅和流暢
,如下圖。
(圖片來自 Medium:Why should you learn Go?
)
第三,Go 語言的 lib 庫麻雀雖小五臟俱全。Go 語言的 lib 庫中基本上有絕大多數常用的庫。
第四,C 語言的理念和 Python 的姿態。C 語言的理念是信任程序員,保持語言的小巧,不屏蔽底層且底層友好,關注語言的執行效率和性能。而 Python 的姿態是用盡量少的代碼完成儘量多的事。於是我能夠感覺到,Go 語言想要把 C 和 Python 統一起來,這是多棒的一件事啊。
(圖片來自 Medium:Why should you learn Go?
)
所以,即便 Go 語言存在諸多的問題,比如垃圾回收、異常處理、泛型編程
等,但相較於上面這幾個優勢,我認爲這些問題都是些小問題。於是就毫不猶豫地入坑了。
- 當然,一個技術能不能發展起來,關鍵還要看三點。
有沒有一個比較好的社區
。像 C、C++、Java、Python 和 JavaScript 的生態圈都是非常豐富和火爆的。尤其是有很多商業機構參與的社區那就更爲人氣爆棚了,比如 Linux 的社區
。
有沒有一個工業化的標準
。像 C、C++、Java 都是有標準化組織的。尤其是 Java,其在架構上還搞出了像 J2EE 這樣的企業級標準。
有沒有一個或多個殺手級應用
。C、C++ 和 Java 的殺手級應用不用多說了。
上述的這三點是非常關鍵的,新的技術只需要佔到其中一到兩點就已經很不錯了
,何況有的技術,比如 Java,是三點全佔到了,所以,Java 的發展是如此好。當然,除了上面這三點重要的,還有一些其它的影響因素,比如:
學習曲線是否低,上手是否快
。這點非常重要,C++ 在這點上越做越不好了。
有沒有一個不錯的提高開發效率的開發框架
。如:Java 的 Spring 框架,C++ 的 STL 等。
是否有一個或多個巨型的技術公司作爲後盾
。如:Java 和 Linux 後面的 IBM、Sun……
有沒有解決軟件開發中的痛點
。如:Java 解決了 C 和 C++ 的內存管理問題。
用這些標尺來量一下 Go 語言,我們可以清楚地看到:
- Go 語言容易上手;
- Go 語言解決了併發編程和寫底層應用開發效率的痛點;
- Go 語言有 Google 這個世界一流的技術公司在後面;
- Go 語言的殺手級應用是 Docker,而 Docker 的生態圈在這幾年完全爆棚了。
所以,Go 語言的未來是不可限量的
。當然,個人覺得,Go 可能會吞食很多 C、C++、Java 的項目。不過,Go 語言所吞食主要的項目應該是中間層的項目,既不是非常底層也不會是業務層。
也就是說,Go 語言不會吞食底層到 C 和 C++ 那個級別的,也不會吞食到高層如 Java 業務層的項目。Go 語言能吞食的一定是 PaaS 上的項目,比如一些消息緩存中間件
、服務發現 、服務代理
、控制系統
、Agent、日誌收集
等等,沒有複雜的業務場景,也到不了特別底層(如操作系統)的中間平臺層的軟件項目或工具。而 C 和 C++ 會被打到更底層,Java 會被打到更上層的業務層。這是我的一個判斷。
關於 Docker ,這是雲計算中 PaaS 的關鍵技術,雖然,這世上在出現 Docker 之前,幾乎所有的要玩公有 PaaS 的公司和產品都玩不起來,比如:Google 的 GAE,國內的各種 XAE,如淘寶的 TAE,新浪的 SAE 等。但我還是想說,PaaS 是一個被世界或是被產業界嚴重低估的平臺。
PaaS 層是承上啓下的關鍵技術,任何一個不重視 PaaS 的公司,其技術架構都不可能讓這家公司成長爲一個大型的公司。因爲 PaaS 層的技術主要能解決下面這些問題。
軟件生產線的問題
。持續集成和持續發佈,以及 DevOps 中的技術必需通過 PaaS。
分佈式服務化的問題
。分佈式服務化的服務高可用、服務編排、服務調度、服務發現、服務路由,以及分佈式服務化的支撐技術完全是 PaaS 的菜。
提高服務的可用性 SLA
。提高服務可用性 SLA 所需要的分佈式、高可用的技術架構和運維工具,也是 PaaS 層提供的。
軟件能力的複用
。軟件工程中的核心就是軟件能力的複用,這一點也完美地體現在 PaaS 平臺的技術上。
所以,Go 語和 Docker 作爲 PaaS 平臺的關鍵技術前途是無限的,我很慶幸趕上了這個潮流。