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語言是谷歌2009發佈的第二款開源編程語言,作為火爆好入職的編程語言,自面世以來,以高效的開發效率和完美的運行速度,迅速風靡全球,被譽為“21世紀的C語言”。
Go語言專門針對多處理器系統應用程序的編程進行了優化,可以在不損耗程序性能的前提下簡化代碼的複雜性,使用Go編譯的程序不僅媲美C/C++代碼的速度,而且更加安全、支持並行進程。
國內外哪些企業在使用Go語言?
國外如Google、facebook、AWS等,國內如阿里巴巴、騰訊、百度、抖音、小米、京東、360、網易、新浪、愛奇藝、嗶哩嗶哩等都已開始大規模使用Go語言開發各種應用。
還記得Gopher China 2019大會嗎?滴滴公司作為主辦方分享Go語言在大型微服務框架設計方面的實踐,百度分享Go語言在春晚搶紅包項目、自動駕駛、百度智能小程序、百度APP等方面的應用優勢,知乎使用Go語言重構代碼後節省超過80%的服務器資源。此外,騰訊也在積極向Go語言靠攏。
Go語言能做什麼?
服務端開發
爬蟲及大數據
網絡編程
Paas雲平臺領域
分佈式存儲領域
區塊鏈領域
容器虛擬化
2010年1月10日,Go語言摘得了TIOBE公佈的2009年年度大獎。隨著《2018中國區塊鏈產業白皮書》的發佈,區塊鏈被列入國家戰略,Go語言作為區塊鏈主流編程語言怎能不火?
Go語言的優勢
強悍併發性能(Go內置Goroutine協程調度機制,處理併發性相當強悍);
開發速度快(這個奇特的語言代碼簡易度接近Python,運行速度媲美C語言);
人才缺口大(供求比例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,感覺這是個卡在中間的語言,小公司不敢用,大公司更不敢用。不過部署是真的快,開發效率也高,就是維護麻煩。