什麼是go/golang ?爲何要使用Go語言?Go 語言的優點在哪裏?Go語言入門

做者:Sophos
連接:https://www.zhihu.com/question/21409296/answer/47481548
來源:知乎


背景

在接觸Golang之前,我用C/C++、Lua及Python做爲主要開發語言。前端

C/C++的問題:mysql

  • 開發效率低,對開發者要求高
  • libc只向後兼容,運維難度偏大

Lua/Python的問題:nginx

  • 動態語言,缺乏編譯過程,低級錯誤頻出
  • 缺乏有效的性能分析及調試工具
場景

當時剛完成了nginx WAF模塊的開發工做,便開始着手搭建WAF的後臺管理系統。 因爲以前同事都用的fluentd做爲日誌收集組件,爲保持基礎組件的一致性,我也選擇了fluentd。 即最終架構爲fluentd->mongodb->mysql,再基於mysql作前端數據展現。 後來被坑了許屢次,就決定用Go重寫fluentd以解決下面幾個問題:git

  • fluentd在ubuntu 9.04偶爾會出現假死,致使數據丟失
  • fluentd難以接入公司現有的包發佈系統,致使運維難度極大
  • mongodb採用mmap實現,數據量大時佔用內存太高
方案

事實上,這兩個項目都是爲了解決上面提到的問題。 提及來也許你不信,這兩個套代碼是我在業餘時間完成的,也就是說這根本不算在KPI以內。 其實一開始我也沒想到可以這麼快就寫得七七八八,畢竟是現學現用啊。 但實際狀況就是,我花了一週時間寫完httpmq,一個月多時間就寫好了gofluent……固然,這兩個項目還有不少不完善的地方。目前就日誌收集方案來講,我更推薦elastic/logstash-forwarder · GitHubelastic/logstash · GitHub配合使用。github


爲何選擇Golang

那麼,爲何我會選擇Golang呢?其實我在作出這個選擇以前已經花了大量時間作過詳盡調研。 國外如Google、AWS、Cloudflare、CoreOS等,國內如七牛、阿里等都已經開始大規模使用Golang開發其雲計算相關產品。 跟着世界級巨人的腳步應該不至於走錯方向,並且在學習Golang的過程當中,我也漸漸被其背後的設計哲學所折服。sql


另外,雲風博客中曾說過這樣一句話:mongodb

我發現我花了四年時間錘鍊本身用 C 語言構建系統的能力,試圖找到一個規範,能夠更好的編寫軟件。結果發現只是對 Go 的模仿。缺少語言層面的支持,只能是一個拙劣的模仿。ubuntu

如下則是我對Golang的淺薄理解:架構

  • 有C基礎,學Golang很是輕鬆
  • 同步方式輕鬆實現高併發
  • 代碼簡潔,格式統一,閱讀方便
  • 性能強勁的同時,開發效率又不差於Python等動態語言
效果

最開始準備上線的時候其實內心挺忐忑,畢竟一旦出現故障,不只黑鍋得本身背,面子也上過不去啊。 還好結果蠻漂亮,自上線後沒出現過一次突發性BUG,下降運維難度的同時還減小了機器的負載。併發


總而言之,從工程的角度上來看,對於大多數後臺應用場景,選擇Golang是極爲明智的選擇。 這樣能夠很輕鬆的兼顧運行性能、開發效率及維護難度這三大讓諸多程序猿欲仙欲死的奇點。

相關學習資料移步:

 

相關文章
相關標籤/搜索