我被迫選擇了Go語言,但是現在發現它真的“很香”



2018年6月我從工作了5年的公司離職了,離職的原因很簡單:想出去看一看,看外面的公司都在做什麼業務?使用什麼技術?

在離職的前一週,我拿到了華為、聯通和我現在所在公司的offer,之所以沒去華為和聯通是因為它們都不是互聯網公司,我喜歡的是互聯網公司那種開放的氛圍,這種開放的技術氛圍更能讓人獲得更快的成長,接觸到最前沿的技術。而我最終選擇的公司就是這樣的一家公司,技術氛圍好、業務模式新穎。

我被迫選擇了Go語言,但是現在發現它真的“很香”


進入這家互聯網公司以後,開始我接觸的當然是Java的一個項目,而且是一個只有需求還沒有代碼的新項目。從需求分析到架構設計、模型設計、代碼編寫都基本是我一個人完成。差不多2個月的時間這個Java的項目就開發完成並上線,後續的工作就是一些簡單的維護和一些新的需求以及一些功能的調整。

進入公司三個月的時候,我的Team Leader扔給我一個Go語言項目,當然這個項目我之前已經看到過,但是當時我並不懂Go語言,所以Team Leader並沒讓我做相關的開發工作。現在因為人員的變動我必須要接手這個項目,所以我開始學習Go語言,也同時開啟了我的第二計算機語言之路。

我被迫選擇了Go語言,但是現在發現它真的“很香”


初次接觸Go語言的時候,我並沒有一開始就去找相關的資料去學習,而是開始看TL給我的這個Go項目,讓他給我講解了這個項目的主要業務邏輯,包括入口類方法、調用鏈,弄清楚這些我就開始看這個項目。其實如果接觸過其它計算機語言的話,閱讀Go項目一點問題都沒有。即使Go中的數據類型、方法入參、返回值的寫法跟我們以往的語言不一樣,但並不妨礙你理解這門語言的特性。尤其是接觸過JavaScript語言的開發人員來說,更容易接受Go語言,因為它的方法和參數定義和JavaScript對於方法和參數的定義很像。例如:都是通過var來定義參數,方法都是以function定義,當然JavaScript是一門弱類型的語言,它沒有像Go語言的int、int32、int64、string等強類型語言具有的數據類型,但是他們的某些關鍵字和寫法與Go語言很相像,熟悉JavaScript的開發者天然的對Go語言有好感。

我被迫選擇了Go語言,但是現在發現它真的“很香”


我用兩天的時間熟悉完了這個Go項目,在熟悉項目的過程中我當然也對它的語法有了一定的瞭解。然後我就開始接受TL給我的新需求並開始編碼工作。我“照貓畫虎”式的完成了一個個的新需求,在編寫代碼的時候,我會去查資料,例如:Go中的strconv中的各種方法,凡是你在Java中關於String操作的方法都能在Go語言找到,如果找不到,那就再找一遍,如果還是找不到,那就自己實現一個。通過一邊編寫Go語言代碼一邊查相關資料,我很快對這門語言瞭解的更深入了,我知道它天生就是為分佈式高併發系統設計的語言。同樣的服務器配置,Go語言能輕鬆實現4000QPS的業務邏輯,但是用Java就不太容易,需要做各種性能用戶,這都得益於Go語言的協程設計。

協程不同於線程,協程是語言本身的機制,靠語言自身的機制去做多任務的調度,而線程並不是語言的特性,它需要靠容器來調度。例如我們常見的Java Web項目併發請求,這些併發請求(線程)要靠tomcat、jetty等web容器去調度,所以多線程的性能取決於容器的調度性能。而容器的調度性能我們開發者很難去優化,

就如一臺4G8G的服務器,tomcat跑3000的QPS都很吃力(不是簡單的輸出hello word),而同等配置下,Go語言跑5000的QPS都不費力!

我被迫選擇了Go語言,但是現在發現它真的“很香”

當然Go語言有它自身的侷限性,一個重要的侷限性就是弱事務。我們都知道Java中的Spring框架為我們提供了事務性,我們可以保證我們一次請求的多個操作要麼全部失敗,然後回滾,要麼全部成功,它具有很強的事務性,

所以我們可以用Java語言來編寫銀行、支付等系統但是Go語言並不嚴格強調事務性,強事務必然會帶來併發性能的損失。所以,如果你的系統可以接受一定程度的數據不一致性,那就可以選擇Go語言,當然這不是絕對的,因為我們也可以通過MQ等措施來解決數據的不一致性,那麼GO語言的使用場景都大很多了。

學習一門編程語言最好的方式絕對不是一開始就去讀它的相關技術文檔,如果有機會我們能參與到實際的項目開發中,那我們應該積極的參與其中。通過在實際業務場景對該計算機語言的使用,我們可以快速的掌握這門語言的特性,這種學習方式是最快最有成效的一種學習方式。只有真正使用過它,你才能真正瞭解它,“紙上談兵”永遠不可能打敗真正的敵人。

我被迫選擇了Go語言,但是現在發現它真的“很香”

接觸Go語言是實際需求所致,但通過使用它,我發現它真的“很香”,如果你想打造自己的高併發系統,或者想讓自己目前的系統併發性能提升一個數量級,Go語言是你最好的選擇。從現在起,不妨學習它並使用它,你也會覺得它”很香”。


分享到:


相關文章: