在糾結新語言的學習是go仍是rust

Rio的經驗分享:程序員

知乎大部分項目是 Python 寫的,有幾個小項目是用 Go 寫的。我從一個 Python 爲主的開發者的角度說說對 Go 的優勢的體會吧:服務器

  1. 部署簡單。Go 編譯生成的是一個靜態可執行文件,除了 glibc 外沒有其餘外部依賴。這讓部署變得異常方便:目標機器上只須要一個基礎的系統和必要的管理、監控工具,徹底不須要操心應用所需的各類包、庫的依賴關係,大大減輕了維護的負擔。這和 Python 有着巨大的區別。因爲歷史的緣由,Python 的部署工具生態至關混亂【好比 setuptools, distutils, pip, buildout 的不一樣適用場合以及兼容性問題】。官方 PyPI 源又常常出問題,須要搭建私有鏡像,而維護這個鏡像又要花費很多時間和精力。
  2. 併發性好。Goroutine 和 channel 使得編寫高併發的服務端軟件變得至關容易,不少狀況下徹底不須要考慮鎖機制以及由此帶來的各類問題。單個 Go 應用也能有效的利用多個 CPU 核,並行執行的性能好。這和 Python 也是天壤之比。多線程和多進程的服務端程序編寫起來並不簡單,並且因爲全局鎖 GIL 的緣由,多線程的 Python 程序並不能有效利用多核,只能用多進程的方式部署;若是用標準庫裏的 multiprocessing 包又會對監控和管理形成很多的挑戰【咱們用的 supervisor 管理進程,對 fork 支持很差】。部署 Python 應用的時候一般是每一個 CPU 核部署一個應用,這會形成很多資源的浪費,好比假設某個 Python 應用啓動後須要佔用 100MB 內存,而服務器有 32 個 CPU 核,那麼留一個核給系統、運行 31 個應用副本就要浪費 3GB 的內存資源。
  3. 良好的語言設計。從學術的角度講 Go 語言其實很是平庸,不支持許多高級的語言特性;但從工程的角度講,Go 的設計是很是優秀的:規範足夠簡單靈活,有其餘語言基礎的程序員都能迅速上手。更重要的是 Go 自帶完善的工具鏈,大大提升了團隊協做的一致性。好比 gofmt 自動排版 Go 代碼,很大程度上杜絕了不一樣人寫的代碼排版風格不一致的問題。把編輯器配置成在編輯存檔的時候自動運行 gofmt,這樣在編寫代碼的時候能夠隨意擺放位置,存檔的時候自動變成正確排版的代碼。此外還有 gofix, govet 等很是有用的工具。
  4. 執行性能好。雖然不如 C 和 Java,但一般比原生 Python 應用仍是高一個數量級的,適合編寫一些瓶頸業務。內存佔用也很是省。
相關文章
相關標籤/搜索