【Go】初識Go語言

前言


2017.10,作爲 Go 語言的三位創始人之一,Unix 老牌黑客羅勃·派克(Rob Pike)在新文章“Go: Ten years and climbing”中,回顧了一下 Go 語言的發展過程。其中提到,Go 語言這十年的迅猛發展大到連他們自己都沒有想到,並且還成爲了雲計算領域中新一代的開發語言。還提到中國程序員對 Go 語言的熱愛完全超出了他們的想象,甚至他們都不敢相信是真的。

Go 語言和 Docker 這兩種技術已經成爲新一代的雲計算技術,而且可以看到其發展態勢非常迅猛。而中國也成爲了像美國一樣在強力推動這兩種技術的國家。這的確是一件讓人感到非常高興的事,因爲中國在跟隨時代潮流這件事上已經做得非常不錯了。

  • 對Go 語言的瞭解

第一,語言簡單,上手快。Go 語言的語法特性簡直是太簡單了,簡單到你幾乎玩不出什麼花招,直來直去的,學習曲線很低,上手非常快。

第二,並行和異步編程幾乎無痛點。Go 語言的 GoroutineChannel 這兩個神器簡直就是併發和異步編程的巨大福音。像 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 平臺的關鍵技術前途是無限的,我很慶幸趕上了這個潮流。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章