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

2020-12-15 程式設計師架構之路

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

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

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

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

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

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

協程不同於線程,協程是語言本身的機制,靠語言自身的機制去做多任務的調度,而線程並不是語言的特性,它需要靠容器來調度。例如我們常見的Java中的多線程,Java中的多線程是要靠tomcat、jetty等web容器去調度,所以多線程的性能取決於容器的調度性能。而容器的調度性能我們開發者很難去優化,就如一臺4G8G的伺服器,tomcat跑3000的QPS都很吃力(不是簡單的輸出hello word),而同等配置下,Go語言跑5000的QPS都不費力!

當然Go語言有它自身的局限性,一個重要的局限性就是弱事務。我們都知道Java中的Spring框架為我們提供了事務性,我們可以保證我們一次請求的多個操作要麼全部失敗,然後回滾,要麼全部成功,它具有很強的事務性,所以我們可以用Java語言來編寫銀行、支付等系統。但是Go語言並不嚴格強調事務性,強事務必然會帶來並發性能的損失。所以,如果你的系統可以接受一定程度的數據不一致性,那就可以選擇Go語言,當然這不是絕對的,因為我們也可以通過MQ等措施來解決數據的不一致性,那麼GO語言的使用場景都大很多了。

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

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

相關焦點

  • 經驗之談:學習Go語言的利與弊
    在這個競爭越來越烈的社會,掌握一門新語言或新技能,意味著你能比別人多一個機會。但萬事開頭難,學習新東西亦如此。如果開發員想學一門新的程式語言,該選擇什麼呢?
  • web開發我更喜歡使用GO語言
    go語言可能是Google開發的程式語言,迅速受到開發的關注並願意使用它,在2016年被TIOBE 選為「TIOBE 年最佳程式語言」,可想而知go能被開發者認可一定有它獨特的優勢,而我更喜歡使用GO語言web開發。
  • 我為什麼放棄了 Python ,選擇了 Go?
    它展示了多種賦值、數據結構、指針、格式化以及內置的 HTTP 庫。當我第一次編程時,我很喜歡使用 Python 的高階功能。如果你要創建一個基本的 CRUD API,我還是建議你使用 Django + DRF,或者 Rails。原因 4:並發性&通道Go 作為一門語言致力於使事情簡單化。它並未引入很多新概念,而是聚焦於打造一門簡單的語言,它使用起來異常快速並且簡單。其唯一的創新之處是 goroutines 和通道。
  • 為什麼很多公司轉型 Go 語言開發?Go 語言能做什麼
    1、為什麼選擇Go語言選擇Go語言的原因可能會有很多,關於Go語言的特性、優勢等,我們在之前的文檔中也已經介紹了很多了。一般的選擇,都是選擇用於自己公司合適的產品系統來做,比如消息推送的、監控的、容器的等,Golang特別適合做網絡並發的服務,這是他的強項,所以也是被優先用於這些項目。Go語言作為一門大型項目開發語言,在很多大公司相繼使用,甚至完全轉向Go開發。4、寫在最後當然,一個技術能不能發展起來,關鍵還要看三點。
  • Go語言潛力有目共睹,但它的Goroutine機制底層原理你了解嗎?
    來源 | 後端技術指南針(ID:gh_ed1e2b37dcb6)Go語言的巨大潛力有目共睹,今天我們來學習Go語言的Goroutine機制,這也可能是Go語言最為吸引人的特性了,理解它對於掌握Go語言大有裨益,話不多說開始吧!
  • Go語言開發環境:Goland安裝
    一、下載安裝開發環境golandgo語言sdk(go的標準庫)安裝sdk的時候,注意安裝的位置,後面要用到,我這裡安裝到了C盤,目錄為: C:\Go二、配置環境GOROOT在goland中配置sdk:software development kit(軟體開發工具包)三、創建工程目錄創建一個工程目錄,我這裡為: C:\goworkstation,這個目錄會作為環境變量GOPATH的值(馬上講到),同時創建下面三個子目錄
  • 關於go反射中的NumMethod方法的一點發現
    最近在看雨痕的《Go語言學習筆記》,在第六章關於方法集的規則的介紹中,有一個示例,代碼如下:運行之後發現沒有輸出結果:代碼本身沒有報錯,又一次仔細檢查了一下我的代碼和書中的完全相同,沒有問題,但為什麼沒有輸出正確的結果呢?
  • 最理想的語言之一:GO為何如此與眾不同?
    Golang的創建者們做了一件令人難以置信的工作,他們創造了一個看似簡單易用的東西,而它實際上是非常複雜的。「Go其實很複雜。它是我所做過的最複雜的東西之一,但是它卻讓人覺得很簡單......它需要大量的設計、思考、實現工作、完善。簡單是隱藏複雜的藝術!」
  • 大數據開發語言怎麼選?Scala還是Go
    兩者都是出色的語言,可以為並發應用程式和流處理實現出色的性能,但是它們的設計卻大不相同。在本文中,我將嘗試為您簡要介紹這兩種語言,它們的優缺點,並回顧一些實際的用詞情況,在這些情況下,我們將推薦一種語言而不是另一種語言。簡而言之ScalaScala是一種由學者創建的程式語言,它是在JVM上運行的Java的第一種替代方法。
  • 在生產環境用了一個月Go語言,我有4點體會
    更好的錯誤處理——我希望錯誤仍然是帶有錯誤信息和代碼的 JSON 響應。 其它常用的中間件——包含 JWT 驗證和 CORS。 我有兩個選擇:自己實現上述問題的解決方案,針對每個問題使用不同的第三方庫,或者選擇一個 Web 框架,基本上已經做了大部分(如果不是全部)這些事情。
  • 2021年程式語言趨勢預測:Python和JavaScript仍火熱,Go不可小覷
    但是這是在2019年進行的調查,作為一門快速增長的語言,Go的受歡迎程度正在瘋狂增加。Mr Herath 認為統計數據可能會在2020年發生變化。從技術上講,使用Python所做的一切,也可以使用其他程式語言。但是Python的簡單性和優雅性使其比其他程式語言有了更大的發展。無論是程式設計師還是絕對的初學者,學習Python都會在2021年帶來很多就業機會。實際上,一個Python開發人員的平均年薪為116,000美元(美國)。為什麼選擇JavaScript(Node.js)?
  • 2020 年為什麼要選擇 Go 並放棄 Python
    如果您對 Go(Golang)有更深入的了解,那麼您肯定會選它。否則將會選擇Python。那麼我們討論一下。Python 的夥伴們,有 5 個理由可以讓您選擇 Go。讓我們一起閱讀這篇文章。「 Python非常強大,尤其是 Python 3 具有異步功能,但是 Go 將完全取代它在大型企業中的地位……」如果您真的理解引號,則可以嘗試使用 Go 程式語言。
  • 一篇文章帶你入門Go語言基礎之並發
    引言Go語言,專門為並發而生的語言,每啟動一個微線程創建一個代價大概2KB起步假設一個內存條大小4G,一個微線程2kb,1G=1024M=1048576kb,1048576/2=524288,五十多萬個但是你知道像Java,Python等語言,一個線程代價多大嗎???
  • 9種語言版本《Let it go》後
    周深,提到他大家可能會想到虛無縹緲的聲音,變化多端的聲紋,鬼馬的性格,走路的段子手,但是他也是一個有語言天賦的人早在14年前,周深就在B站貢獻了翻唱9語言版本的《Let it go》當時,還沒有登臺亮相的周深還獲得了
  • go語言好不好?可以用來做什麼?如何學好golang?
    該語言是由編寫、閱讀、調試和維護大型軟體系統的人所設計,這也是為他們自己所設計的。」這就是說,設計Go時,有一系列特殊的問題要解決,最初擁有C、Pascal、Modula和Oberon等高級程式語言的最佳特性的堅實基礎。它還牢記了Python、C++、Java等語言的有用特性,這些就是Go要解決的問題。「很多Go的新人都會要求從所知的語言中獲取功能。
  • 2019年度程式語言排行榜公布!我為什麼讓你選擇它
    近日,TIOBE 公布了 2020 年最新一期的程式語言排行榜。上個月有媒體預測 Java, C, Python 和 C# 將有機會獲得「年度程式語言」稱號,現在結果已公布,相信出乎很多人意料 —— 古老的 C 語言了榮獲 2019 年度程式語言稱號。
  • Python和Go都很火,我要怎麼選?
    選自Medium作者:SoftKraft機器之心編譯參與:魔王「人生苦短,我用 Python」是當下非常流行的一句口頭禪。但你有沒有想過,Python 就那麼好嗎?在某些方面,其他語言真的不香嗎?編寫優秀代碼的基礎在於開發者的技能以及他/她所選擇的程式語言。這必然導致開發者之間出現歷史性的衝突,這衝突不僅存在於技能層面,主要還在於開發者所選擇的語言。如果你把兩種程式語言(如 Golang (Go) 和 Python)放在一起對比,大概率會得到這樣的結果。但是,我們退後一步,放下個人偏見和喜好,從優點和功能的角度來評價兩種語言。然後設置公平的競爭環境和技能水準。
  • 女朋友問我:小松子,你知道Go語言參數傳遞是傳值還是傳引用嗎?
    前言哈嘍,大家好,我是asong。今天女朋友問我,小松子,你知道Go語言參數傳遞是傳值還是傳引用嗎?哎呀哈,我竟然被瞧不起了,我立馬一頓操作,給他講的明明白白的,小丫頭片子,還是太嫩,大家且聽我細細道來~~~。文末留了一道思考題,請留下你的答案!!!實參與形參數我們使用go定義方法時是可以定義參數的。
  • 為什麼golang語言會變得越來越流行
    作為一個開發者,如果你細心觀察,就會發現越來越多的公司開始使用go語言進行業務的開發。從知乎到b站,很多公司都把業務全面轉向了go語言。那麼為什麼這麼多公司選擇了go語言,為什麼這麼多開發者選擇了go語言,golang變得越來越流行的原因到底是什麼?
  • Pokemon Go精靈寶可夢GO新手寵物選擇攻略
    原標題:Pokemon Go精靈寶可夢GO新手寵物選擇攻略 在玩家進入Pokemon go精靈寶可夢GO後,博士會讓你抓一個初始寵物。那我們該選小火龍、傑尼龜還有妙蛙種子中的哪只作為初始寵物呢?這次小編就為大家詳細介紹Pokemon go新手寵物選擇。