Go語言為什麼在國內很火?

ycoolone


主要是go的市場切入點非常準確

go被設計出來的目標應用場景是服務器開發,而服務器端開發是c++和java的地盤,佔了大部分份額,go的目標是從他們嘴裡搶蛋糕

程序員選語言除了流行度以外,語言是否好用,寫的程序是否夠快這兩點也是重要的參考指標。

c++的特點是足夠快,卻不是很好用

java的特點是足夠好用,但不見得快

又快又好用,又符合大眾口味, 又專注於服務器領域的語言,似乎沒有

於是go誕生了

go語言在易用性方面秒殺c++這點毋庸置疑,任何有服務器開發經驗的程序員都可以快速上手go語言, 門檻非常友好。而c++,即使你有十年編程經驗,初玩c++ 也非被摔個七葷八素不可。

至於在性能方面是否比java強?假如寫go程序和java程序的都是經驗豐富的優秀程序員,那麼用go寫的程序不一定比用java寫的程序員快。然而,如果都是初次使用這兩門語言的程序員寫程序,那麼go程序必定比java程序快。

其中原因在於go是一門以併發編程為特色的而設計的語言,在語法層面支持協程,也就是goroutines。而java不支持協程,只支持多線程。表面上看協程和線程似乎是同一個東西,能達到的效果也相同,但是在底層的實現上卻有著非常大的區別,在服務器端的絕大部分應用中,協程要比線程節省資源的多。

通俗易懂的講,線程是操作系統的資源,當java程序創建一個線程,虛擬機會向操作系統請求創建一個線程,虛擬機本身沒有能力創建線程。而線程又是昂貴的系統資源,創建、切換、停止等線程屬性都是重量級的系統操作,非常消耗資源,所以在java程序中每創建一個線程都需要經過深思熟慮的思考,否則很容易把系統資源消耗殆盡。

而協程,看起來和線程差不多,但創建一個協程卻不用調用操作系統的功能,編程語言自身就能完成這項操作,所以協程也被稱作用戶態線程。我們知道無論是java還是go程序,都擁有一個主線程,這個線程不用顯示編碼創建,程序啟動時默認就會創建。協程是可以跑在這種線程上的,你可以創建多個協程,這些協程跑在主線程上,它們和線程的關係是一對多。如果你要創建一個線程,那麼你必須進行操作系統調用,創建的線程和主線程是同一種東西。顯然,協程比線程要輕量的多。

既然協程這麼優秀,為什麼不徹底替代線程呢?事實上協程和線程完全不是兩個相同層面的東西,完全談不上替代一說,協程可以說是一個獨立於線程的功能,它是在線程的基礎上,針對某些應用場景進一步發展出來的功能。我們知道,線程在多核的環境下是能做到真正意義上的並行執行的,注意,是並行,不是併發,而協程是為併發而生的。

打個簡單的比方吧,射鵰英雄傳看過吧,周伯通教郭靖一手畫圓,一手畫方,兩隻手同時操作,左右互搏,這個就是並行。普通人肯定做不到,不信你試試。你不能並行,卻可以併發,你先左手畫一筆,然後右手畫一筆,同一時候只有一隻手在操作,來回交替,直到完成兩個圖案是,這就是併發,協程主要的功能。

想象一下業務場景,你需要執行兩個互不依賴的sql查詢,為了減少等待時間,常規的操作肯定主線程執行sqlB的同時另起一個線程執行sqlA,使兩個sql並行執行。然而你會發現,執行兩個sql的線程大多數時間只是在等待數據庫服務器的響應,線程只是處於阻塞等待狀態,而不是瘋狂運轉,而線程的創建、切換又很消耗系統資源,顯然這很浪費。這個時候就該協程大展身手了,你可以在主線程中創建一個協程用於執行sqlB,然後再在主線程中執行sqlA,協程和線程一樣,不會阻塞主線程,所以sqlB得到結果後,你可以通過語言的api去看看在協程中的sql執行完畢了沒有,如果沒有則等待,如果執行完畢了就拿結果,和線程操作幾乎一摸一樣。至於sqlA和sqlB是否真正在並行執行根本無所謂。為什麼呢? 我們假設執行一個sql需要三步,提交sql、等待、獲得結果 ,其中第一步和第三步極省時,只要1毫秒一步,而第二步卻要1000毫秒,那麼使用並行的多線程執行兩個sql,你只要花掉1002毫秒,而使用併發的協程你要花掉1004毫秒,但是線程比協程多消耗一個線程的資源,請問你會為了這2毫秒而選擇多線程嗎,顯然不可能,創建線程的開銷都要大於節省下來的時間,這就是協程存在的理由。

而服務器端開發中,大多數時候都是要花大量等待時間的場景,也就是所謂的IO密集,協程極為適合這種場景,而go又主打協程,直接從語法層面支持,切中了以往開發高性能程序太過於複雜的痛點,因此廣受程序員們的歡迎。java其實也可以模擬出協程的效果,比如用nio和多線程,也能假裝goroutines的效果,但實際操作起來太過於麻煩,還要掌握一大堆枯澀的概念,完全沒有goroutines的優雅。所以在併發性能上,go完勝java。換言之,go比java更適應高併發場景,能更優雅方便的寫出高併發程序。

當然,以上只是go流行起來原因的其中之一。除此之外非常重要的原因在於,go語言有一個好爹google,以及祖師爺級別的創始人unix與C語言之父肯·湯普遜。想象一下,c語言已經如此牛逼,而還只是這位大神早年的作品,那麼現在同樣出於他手的go語言勢必是集大成的作品,而且還有財大氣粗口碑出眾的google背書,簡直就是含著金鑰匙出生啊,不牛逼都難,不去用用簡直枉為程序員。

對標一下技術上同樣出眾的.net core,各方面都不輸於go,但就是火不起來,究其原因還是爹作的孽,微軟的原罪已經成了廣大互聯網程序員的刻板影響,一時三刻無法逆轉,即使近年來有所改善,但還是和谷歌相去甚遠,這也是.net core明明足夠優秀但就是沒法贏得程序員們青睞的原因。

以上這些就是go語言為什麼這麼火的部分原因。


程序員解決問題之道


謝謝邀請!

Go語言不只是在國內很火,在全球範圍了也有不少的大名鼎鼎的公司在使用,比較著名的是全球發展最快的移動互聯網公司字節跳動,以及國內最好的二次元視頻網站bilibili都在使用Go語言作為主要的後端開發語言,你天天在用的抖音、今日頭條、嗶哩嗶哩背後離不開Go語言的功勞。

全球有哪些公司在使用Go語言

目前在全球範圍內使用Go語言的科技公司並不在少數,很多企業更是將Go語言作為自己的核心技術棧,這其中就包括了Google、Facebook、Amazon、Docker、騰訊、百度、阿里、字節跳動、嗶哩嗶哩視頻網站等等。

Google作為開發Go語言的企業,自然是要支持Go語言的,Google的開源項目裡面不少就是使用Go語言開發的,Google的GitHub開源主頁裡面,至少有五分之一的項目都是用Go語言開發的。

Facebook也將Go語言作為主要開發語言,在Facebook內部,PHP、Go都佔據了很大的比例,其中大名鼎鼎的grace就是用Go語言開發的。亞馬遜的AWS能夠成為全球最大的雲計算公司,Go語言功不可沒,現在阿里雲也在追尋AWS的腳步,開始大規模使用Go語言開發自己的雲計算產品。

Docker相信已經不需要我過多介紹了,作為目前全行業最好的容器,Go是Docker公司最重要的編程語言。相應的騰訊在也曾做過萬臺規模的Docker實驗,因此騰訊在這一塊也做出了很多嘗試,大名鼎鼎的騰訊遊戲藍鯨平臺就需要很多的Go語言工程師來做容器開發,騰訊的核心技術棧是C/C++,不過很多業務用Go語言做起來方便很多,可是騰訊的技術棧很多都基於C/C++,重構難度極大,因此騰訊在很多新業務都在嘗試用Go語言來開發。

春晚的時候大家應該都見識了百度技術的強大,估計不少人都被百度強大的技術實力折服了,這裡面百度底層架構的穩定起了很大的作用。百度運維的BFE項目,主要是負責前段流量的介入,以及百度的消息系統,這兩塊非常重要的業務的後端服務器開發和維護都是使用Go語言。

最後說一說比較年輕的三家中國公司,一家是七牛雲,是目前最好的雲計算公司之一,七牛雲的老闆許式瑋是原來雷軍時代金山WPS的架構師,也是中國最早的Go語言佈道者。字節跳動旗下的抖音、今日頭條等產品線的後端開發很大比例都是通過Go語言來實現的,因此字節跳動也是Go語言大戶。最後是上一次嗶哩嗶哩的代碼洩漏,大家也看到了,嗶哩嗶哩的核心代碼幾乎全是Go語言寫的。

Go語言有哪些優勢

性能極其出色:Go語言的性能非常出色,最關鍵的是在性能強勁的同時還能像Python語言一樣高效地進行開發,要知道Go語言是靜態語言,而Python是動態語言。

編譯方便、部署簡單:Go語言可以直接編譯為機器碼,編譯生成的是一個靜態可知從文件,除了glibc之外沒有不依賴其他外部庫。部署就直接扔一個文件就可以了,目標機器上只需要基礎的系統,必要的管理、監控工具就可以了,完全可以不用考慮各種包、庫的以來關係,維護成本也大大降低。

出色的併發性能:這一點對於後端語言還是很重要的,曾經Java最大的殺手鐧,一個是跨平臺、一個就是強大的併發能力。Go語言是語言層面的支持併發,這一點你可以充分利用多核,也可以非常容易的使用併發。

良好工程語言:Go語言可能不具備很好的學術特性,很多高級編程語言有的特性Go語言都沒有,可這卻讓Go語言成為一個非常好的工程語言,沒有任何多餘的,規範非常簡單靈活,這一點你用Java就知道了,也有完善的工具鏈,幾乎就是為工程而生的。

Go語言的應用場景

Go語言在消息推送、監控、容器、處理日誌、數據打包、虛擬機處理、文件系統等領域非常有優勢,並且非常適合用來做網絡併發服務。

服務器編程、分佈式系統、數據庫代理起、網絡編程、內存數據庫、以及各種各樣的雲平臺,這都是Go語言的主戰場。

說了這麼多,我覺得作為一個程序員,你或許真的有必要學習一下Go語言,這真的是一門非常優秀的編程語言。


本文為字節跳動簽約作者EmacserVimer悟空問答原創文章,未經允許轉載、抄襲必究!

EmacserVimer


Go語言是谷歌2009發佈的第二款開源編程語言,以其可以媲美C或C++代碼的速度,而且更加安全、支持並行進程得到人們的喜愛,而它高併發的特性在後端語言中越來越流行。

根據 Google Trends 的統計結果,可以看到 Go 語言在過去一年中的流行程度是穩中有升。

Go 語言在 2017 年的流行趨勢


初看起來,Go 語言在 2017 年表現得比較平淡。但是可以看看從2016-2017年的趨勢:

Go 語言在過去 5 年間的流行趨勢


根據圖上數據顯示,Go 語言在 2017 年的“上升”是對近年來的一種延續,Go 語言的適用範圍一直在不斷地擴大。經過廣大開發者的共同努力,它已開始涉足在當前大熱的數據科學和機器學習領域。雖然還只是開始,深信 Go 語言在人工智能時代和機器人時代也能大放異彩。

同時,中國的開發者對於 Go 語言的流行起著至關重要的作用。

Go 語言在 2017 年的流行區域熱圖


GO語言的發展,讓越來越多的互聯網公司對程序員有了更高的技術要求。

2018年騰訊後臺開發工程師招聘要求

2018年阿里巴巴開發工程師招聘要求


2018年今日頭條開發工程師招聘要求


以上是在某招聘網站顯示的,BAT互聯網行業對程序員的招聘,都有一個形似的要求:熟練GO語言開發的優先。

由此看來,GO語言成為程序員招聘時候的一個加薪亮點了。

為了讓大家在這個三金四銀的招聘跳槽季,找到讓大家心滿意足的工作,筆者特意整理了黑馬程序員2018年版GO語言開發視頻+源碼。

20個小時快速入門GO語言(部分資料截圖)

這裡發不了鏈接,點贊並關注我即可免費獲得“20個小時快速入門GO語言”資源,小手動起來吧!


黑馬程序員


go語言推出有幾年了,似乎不溫不火。但是在中國範圍內,確實被關注的一塌糊塗。

這是2017年2月份TIOBE出的編程語言排名:

但是在中國,很多公司,很多程序員都在談論go語言,也就是說在中國對於go的關注異常火爆。

根據谷歌搜索的統計,如下圖:

外國人專門寫了一篇文章,來分析為什麼go在中國如此火:《Why is Golang popular in China?》為了方便查看文章,我把網頁內容以圖片的方式展示出來,如下圖:

同時我也參考了知乎一位匿名作者的答案

這個“火”字看你怎麼理解了。
Go在國內更火只是感覺上的。比如推文,以及談論的相關話題較多而已(但能有nodejs多麼?),本身中國人口數量就多,按這個衡量的辦法去看的話,swift在國內也比在國外火;
實際上Go在國外更火(這裡的火是實際的使用情況),對比一下國內和國外使用Go的程度、數量,Go相關的技術大會舉辦的頻率和數量就一目瞭然了。
Go在國內真正上被全棧使用的就七牛一家,但國外除了docker,coreOS還有很多初創企業。
國內比較有影響力的就一個beego框架,你看看國外的有多少。
去github上搜一下active的Go的project數量,看看Go在國外是不是沒人用?我反正在github的trending裡面幾乎每天都能看到Go的project。hacker news上面有關Go的“xxx writen in Go”的炒作文也不要太多。
這個 dariubs/GoBooks · GitHub 是有人整理的Go相關的書籍,看看是不是國外的書籍比國內的少?8月份K&R中的K也要推出屬於Go的聖經了。
另外老有人喜歡說:Google喜歡關閉產品,這玩意兒遲早死掉。可惜golang是開源項目,關不掉的,CloudFlare那個crypto的patch(Gerrit Code Review)以後可能會進Go的標準庫,Godep已經成為事實上的包管理標準,這些都是社區自己搞出來的,和google一毛線關係沒有。另外就是最近google自己一些主力產品或者平臺在優先支持語言上,Go總是和java,c/c++,python一起名列其中,grpc就是一個例子等等。所以,覺得Go只是google的一個玩具的人,你的觀點能不能站得住腳,自己掂量吧。
我的個人觀點是:
Go顯示已經站住了腳跟(如果是2013年,我還是不敢說這種話的),找到了屬於自己的空間,但是比起那些主流的甚至nodeJS來說,還是使用的不夠廣泛。這個語言人為炒作也罷,一些人認為的google光環也罷,實際使用也罷,總之:
這個語言已經站住腳跟了,能用於並且已經用於生產環境了,接下來幾年只會一直呈上升勢頭。

-------------------------------

最後

1、一些真正使用go語言的公司:
這些公司在高速發展的同時,Golang也因此在國內逐漸傳播開來。在雲計算時代,從國內Go語言發展和應用來看,七牛算是國內第一家選Go語言做服務端的公司。早在2011年,當Go語法還沒完全穩定下來的情況下,七牛就已經選擇將Go作為存儲服務端的主題語言。關於這點,七牛CEO許式偉談到:編程哲學的重塑是Go語言獨樹一幟的根本原因,其它語言仍難以擺脫OOP或函數式編程的烙印,只有Go完全放棄了這些,對編程範式重新思考,對熱門的面向對象編程提供極度簡約但卻完備的支持。Go是互聯網時代的C語言,不僅會制
霸雲計算,10年內將會制霸整個IT領域。
2、在中國程序員眼中,谷歌出品必屬精品
確實,在互聯網世界,在開源世界,Google為我們貢獻了太多太多。
3、創業公司假裝高逼格,假裝geek範兒
The word geek is a slang term originally used to describe eccentric or non-mainstream people;in current use,the word typically connotes an expert or enthusiast or a person obsessed with a hobby or intellectual pursuit,with a general pejorative meaning of a"peculiar person,especially one who is perceived to be overly intellectual,unfashionable,or socially awkward"
4、 docker異常火爆,帶動了對go語言的關注
Docker是PaaS供應商dotCloud開源的一個基於LXC的高級容器引擎,源代碼託管在GitHub 上,基於Go語言開發並遵從Apache2.0協議開源。
5、go語言本身的一些特性
部署簡單併發性好
性能好
6、《go語言從入門到放棄》一書的火爆

充電室


Go語言是谷歌2009發佈的第二款開源編程語言,作為火爆好入職的編程語言,自面世以來,以高效的開發效率和完美的運行速度,迅速風靡全球,被譽為“21世紀的C語言”。

Go語言專門針對多處理器系統應用程序的編程進行了優化,可以在不損耗程序性能的前提下簡化代碼的複雜性,使用Go編譯的程序不僅媲美C/C++代碼的速度,而且更加安全、支持並行進程。

國內外哪些企業在使用Go語言?

國外如Google、facebook、AWS等,國內如阿里巴巴、騰訊、百度、抖音、小米、京東、360、網易、新浪、愛奇藝、嗶哩嗶哩等都已開始大規模使用Go語言開發各種應用。

還記得Gopher China 2019大會嗎?滴滴公司作為主辦方分享Go語言在大型微服務框架設計方面的實踐,百度分享Go語言在春晚搶紅包項目、自動駕駛、百度智能小程序、百度APP等方面的應用優勢,知乎使用Go語言重構代碼後節省超過80%的服務器資源。此外,騰訊也在積極向Go語言靠攏。

Go語言能做什麼?

  1. 服務端開發

  2. 爬蟲及大數據

  3. 網絡編程

  4. Paas雲平臺領域

  5. 分佈式存儲領域

  6. 區塊鏈領域

  7. 容器虛擬化

2010年1月10日,Go語言摘得了TIOBE公佈的2009年年度大獎。隨著《2018中國區塊鏈產業白皮書》的發佈,區塊鏈被列入國家戰略,Go語言作為區塊鏈主流編程語言怎能不火?

Go語言的優勢

  1. 強悍併發性能(Go內置Goroutine協程調度機制,處理併發性相當強悍);

  2. 開發速度快(這個奇特的語言代碼簡易度接近Python,運行速度媲美C語言);

  3. 人才缺口大(供求比例1:10),就業薪資高(從業3年薪資25k+),方向廣(移動互聯網、數據服務、電子商務、金融、企業服務、遊戲、O2O、社交網絡、文化娛樂、教育、醫療健康、廣告營銷等等)。

Go語言的應用領域

服務器編程(處理日誌、數據打包、虛擬機處理、文件系統)、網絡編程(Web應用、API應用、下載應用)、雲平臺、內存數據庫等。

人人追喊“寒冬”,為何Go語言從業者薪資一路高漲,人才卻少之又少。

Hired 發佈《2019 軟件工程師狀態》最新數據報告顯示,Go打敗Scala、Ruby、Java、Java、PHP、Python,Go語言從業者成為2019年最具新引力的人才。請問你的吸引力指數是多少?


數字技術觀察


因為中國跟風嚴重。。比如說react native,就有公司衝上去就搞,其實老外根本很少用。甚至都不瞭解就去用了,有多少人認為react native就是java的感覺,開發一次,Android iOS都能跑。


MageBJ


因為都是做網絡的


HerrIdol705


因為學不懂C語言


我們都只是時間的過客


主要是培訓機構炒的,還有區塊鏈[靈光一閃]學go也就大點的公司招人,沒點能力大公司還真進不去。。小公司為了成本通常用java或者php了,招人成本也小


Vgjnbj


個人覺得沒有多火,我記得尼比魯好像用的go,感覺這是個卡在中間的語言,小公司不敢用,大公司更不敢用。不過部署是真的快,開發效率也高,就是維護麻煩。


分享到:


相關文章: