文章來自公眾號:Go 語言圈
點選進入:Go 語言技術微信群
一、我們為什麼選擇Go語言
選擇Go語言的原因可能會有很多,關於Go語言的特性、優勢等,我們在之前的文件中也已經介紹了很多了。但是最主要的原因,應該是基於以下兩方面的考慮:
執行效能
畢竟是類C的執行速度,對於一些服務來說,效能是極其重要的一環,事關係統的吞吐、訪問的延遲,進而會影響使用者的體驗,Go語言通過協程可以方便的實現並行處理,達到處理效率的最大化 ,提升系統的吞吐能力。
開發效率
GO語言使用起來簡單、程式碼描述效率高、編碼規範統一、上手快。通過少量的程式碼,即可實現框架的標準化,能快速的構建各種通用元件和公共類庫,進一步提升開發效率,實現特定場景下的功能量產。
二、Go語言能做什麼
Go 語言從釋出 1.0 版本以來備受眾多開發者關注並得到廣泛使用,Go 語言的簡單、高效、併發特性吸引了眾多傳統語言開發者的加入,而且人數越來越多。
鑑於Go語言的特點和設計的初衷,Go語言作為伺服器程式語言,很適合處理日誌、資料打包、虛擬機器處理、檔案系統、分散式系統、資料庫代理等;網路程式設計方面,Go語言廣泛應用於Web 應用、API應用、下載應用等;除此之外,Go語言還適用於記憶體資料庫和雲平臺領域,目前國外很多雲平臺都是採用Go開發。
伺服器程式設計,以前你如果使用C或者C++做的那些事情,用Go來做很合適,例如處理日誌、資料打包、虛擬機器處理、檔案系統等。
分散式系統、資料庫代理器、中介軟體等,例如Etcd。
網路程式設計,這一塊目前應用最廣,包括Web應用、API應用、下載應用,而且Go內建的net/http包基本上把我們平常用到的網路功能都實現了。
資料庫操作
開發雲平臺,目前國外很多雲平臺在採用Go開發
三、國內外有哪些企業或專案使用Go語言
Go釋出之後,很多公司特別是雲端計算公司開始用Go重構他們的基礎架構,很多都是直接採用Go進行了開發,最近熱火朝天的Docker就是採用Go開發的。
使用 Go 語言開發的開源專案非常多。早期的 Go 語言開源專案只是通過 Go 語言與傳統專案進行C語言庫繫結實現,例如 Qt、Sqlite 等;後期的很多專案都使用 Go 語言進行重新原生實現,這個過程相對於其他語言要簡單一些,這也促成了大量使用 Go 語言原生開發專案的出現。
雲端計算基礎設施領域
代表專案:docker
、kubernetes
、etcd
、consul
、cloudflare CDN
、七牛雲端儲存等。基礎軟體
代表專案:tidb
、influxdb
、cockroachdb
等。微服務
代表專案:go-kit
、micro
、monzo bank
的typhon
、bilibili
等。
-網際網路基礎設施
代表專案:以太坊、hyperledger
等。
採用Go的一些國外公司,如
Docker
、Apple
、Cloud Foundry
、CloudFlare
、Couchbase
、CoreOS
、Dropbox
、MongoDB
、AWS
等公司;
採用Go開發的國內企業:如阿里雲CDN、百度、小米、七牛、PingCAP
、華為、金山軟體、獵豹移動、餓了麼等公司。
四、寫在最後
用這些標尺來量一下 Go 語言,我們可以清楚地看到:
Go語言容易上手;
Go語言解決了併發程式設計和寫底層應用開發效率的痛點;
Go語言有 Google 這個世界一流的技術公司在後面;
Go語言的殺手級應用是 Docker,而 Docker 的生態圈在這幾年完全爆棚了。
所以,Go語言的未來是不可限量的。當然,我個人覺得,Go 可能會吞食很多 C、C++、Java 的專案。不過,Go語言所吞食主要的專案應該是中間層的專案,既不是非常底層也不會是業務層。
也就是說,Go 語言不會吞食底層到 C 和 C++ 那個級別的,也不會吞食到高層如 Java 業務層的專案。Go 語言能吞食的一定是 PaaS 上的專案,比如一些訊息快取中介軟體、服務發現、服務代理、控制系統、Agent、日誌收集等等,沒有複雜的業務場景,也到不了特別底層(如作業系統)的中間平臺層的軟體專案或工具。而 C 和 C++ 會被打到更底層,Java 會被打到更上層的業務層。
好了,我們再用上面的標尺來量一下 Go 語言的殺手級應用 Docker,你會發現基本是一樣的。
最後,我還要說一下,為什麼要早一點地進入這些新技術,而不是等待這些技術成熟了後再進入。原因有這麼幾個。
技術的發展過程非常重要。因為你可以清楚地看到了這種新技術的生態圈發展過程。讓我們收穫最大的並不是這些技術本身,而是一個技術的變遷和行業的發展。
從中,我們看到了非常具體的各種思潮和思路,這些東西比起 技術本身來說更有價值。因為,這不但讓我們重新思考已經掌握的技術以及如何更好地解決已有的問題,而且還讓我看到了未來。不但有了技術優勢,而且這些知識還讓我們的技術生涯多了很多的可能性。
這些關鍵新技術,可以讓你拿到技術的先機。這些對一個需要技術領導力的個人或公司來說都是非常重要的。
一個公司或是個人能夠佔有技術先機,就會比其它公司或個人有更大的影響力。一旦未來行業需求引爆,那麼這個公司或是個人的影響力就會形成一個比較大的護城河,並可以快速地產生經濟利益。
還是那句話,多看看各種語言的生態,或許都並沒有你想象的那麼不堪。。。Go語言設計上確實不夠“先進”,但也是另一種“務實”。其實go不管在國內還是國外已經很受待見了,國外google用的很多,uber也在用,國內有著名的今日頭條,每日千億級的訪問妥妥的。多少語言終其一生都沒有這麼大的應用場景。
本作品採用《CC 協議》,轉載必須註明作者和本文連結