2016-2022 All Rights Reserved.平安財經(jīng)網(wǎng).復(fù)制必究 聯(lián)系QQ280 715 8082 備案號:閩ICP備19027007號-6
本站除標(biāo)明“本站原創(chuàng)”外所有信息均轉(zhuǎn)載自互聯(lián)網(wǎng) 版權(quán)歸原作者所有。
Go語言最初由Google公司的Robert Griesemer、Ken Thompson和Rob Pike三位大牛于2007年開始設(shè)計發(fā)明的。在21世紀(jì)的第一個十年,計算機(jī)在才逐漸開始普及,高校的計算機(jī)相關(guān)專業(yè)也逐漸變得熱門。當(dāng)時學(xué)校主要以C/C++和Java語言學(xué)習(xí)為主,而這些語言大多是上個世紀(jì)90年代或更早誕生的,因此這些計算機(jī)領(lǐng)域的理論知識或編程語言仿佛是上帝創(chuàng)世紀(jì)時的產(chǎn)物,作為計算機(jī)相關(guān)專業(yè)的學(xué)生只能仰望這些成果。
Go語言誕生在21世紀(jì)新一波工業(yè)編程語言即將爆發(fā)的時期。在2010年前后誕生了編譯型語言Rust、Kotlin和Switft語言,前端誕生了Dart、TypeScript等工業(yè)型語言,最新出現(xiàn)的V語言更甚至嘗試站在Go和Rust語言肩膀之上創(chuàng)新。而這些變化都發(fā)生在我們身邊,讓的計算機(jī)愛好者在學(xué)習(xí)的過程中見證歷史的發(fā)展,甚至有機(jī)會參與其中。
Go語言誕生
Go語言最初由Google公司的Robert Griesemer、Ken Thompson和Rob Pike三位大牛于2007年開始設(shè)計發(fā)明的。其設(shè)計最初的洪荒之力來自于對超級復(fù)雜的C++11特性的吹捧報告的鄙視,最終目標(biāo)是設(shè)計網(wǎng)絡(luò)和多核時代的C語言。到2008年中期,語言的大部分特性設(shè)計已經(jīng)完成,并開始著手實(shí)現(xiàn)編譯器和運(yùn)行,大約在這一年Russ Cox作為主力開發(fā)者加入。到了2009年,Go語言已經(jīng)逐步趨于穩(wěn)定。同年9月,Go語言正式發(fā)布并開源了代碼。
以上是《Go語言高級編程》一書中第一章第一節(jié)的內(nèi)容。Go語言剛剛開源的時候,大家對它的編譯速度印象異常深刻:秒級編譯完成,幾乎像腳本一樣可以馬上編譯并執(zhí)行。同時Go語言的隱式接口讓一個編譯型語言有了鴨子類型的能力,筆者也第一次認(rèn)識到原來C++的虛表vtab也可以動態(tài)生成!至于大家最愿意討論的并非特性,其實(shí)并不是Go語言新發(fā)明的基石,早在上個世紀(jì)的八九十年代就有諸多語言開始陸續(xù)嘗試將CSP理論引入編程語言(Rob Pike是其中堅定的實(shí)踐者)。只不過早期的CSP實(shí)踐的語言沒有進(jìn)入主流開發(fā)領(lǐng)域,導(dǎo)致大家對這種并發(fā)模式比較陌生。
除了語言特性的創(chuàng)新之外,Go語言還自帶了一套編譯和構(gòu)建工具,同時小巧的標(biāo)準(zhǔn)庫攜帶了完備的Web編程基礎(chǔ)構(gòu)建,我們可以用Go語言輕松編寫一個支持高并發(fā)訪問的Web服務(wù)。
作為互聯(lián)網(wǎng)時代的C語言,Go語言終于強(qiáng)勢進(jìn)入主流的編程領(lǐng)域。
Go語言十年奮進(jìn)
Go從2007年開始設(shè)計,在2009年正式對外公布,至今剛好十年。十年來Go語言以穩(wěn)定著稱,Go1.0的代碼在2019年依然可以不用修改直接被編譯運(yùn)行。但是在保持語言穩(wěn)定的同時,Go語言也在逐步夯實(shí)基礎(chǔ),十年來一直向著完美的極限逼近。讓我們看看這十年來Go語言有哪些變化。
界面變化
首先是看看界面的變化。第一次是在2009剛開源的時候,這時候可以說是Go語言的上古時代。Go語言的主頁如下:
那個年代的Gopher們,使用的是hg工具下載代碼(而不是Git),Go代碼是在Google Code托管(而不是GitHub)。隨著代碼的發(fā)展,hg已經(jīng)慢慢淡出Gopher視野,Google Code網(wǎng)站也早已經(jīng)關(guān)閉,而Go1之前的上古時代的Go老代碼已經(jīng)開始慢慢腐化了。
首頁中心是Go語言最開始的口號:Go語言是富有表現(xiàn)力的、并發(fā)的編程語言,并且是簡潔的。同時給了一個“Hello, 世界”的例子(注意,這里的“世界”是日文)。
然后右上角是初學(xué)者的樂園:首先是安裝環(huán)境,然后可能是早期的三日教程,第三個是標(biāo)準(zhǔn)庫的使用。右上角的圖片是Russ Cox的一個視頻,在Youtube應(yīng)該還能找到。
左上角是Go實(shí)戰(zhàn)的那個經(jīng)典文檔。此外FAQ、語言規(guī)范、內(nèi)存模型是非常重要的核心溫度。左下角還有cmd等文檔鏈接,子頁面的內(nèi)容應(yīng)該沒有什么變化。
然后在2012年準(zhǔn)備發(fā)布第一個正式版本Go1,在Go1之前語言、標(biāo)準(zhǔn)庫和godoc都進(jìn)行了大量的改進(jìn)。Go1風(fēng)格的頁面效果如下:
新頁面剛出來的時候有眼睛一亮的感覺,這個是目前存在時間最長久的頁面布局。但是不僅僅是筆者我,甚至Go語言官方也慢慢對頁面有點(diǎn)審美疲勞了。因此,從2018年開始Go語言開始新的Logo和網(wǎng)站的重新設(shè)計工作。
2019年是對Go語言發(fā)展極其重要的一年,今年8月將發(fā)布Go1.13,而這個版本將正式重啟Go語言語法的進(jìn)化,向著Go2前進(jìn)。
總的來說,Go語言官網(wǎng)主頁經(jīng)歷了Go1前、Go1(1.0~1.10)、Go1后(或者叫Go2前)三個階段,分別對應(yīng)3種風(fēng)格的頁面。新的布局或許會成為下個十年Go2的主力頁面。
語法變化
Go語言雖然從2009年誕生,但是到了2012年才發(fā)布第一個正式的版本Go1。其實(shí)在Go1誕生之前Go語言就已經(jīng)足夠穩(wěn)定了,國內(nèi)的七牛云從Go1之前就開始大力轉(zhuǎn)向Go語言開發(fā),是國內(nèi)第一家廣泛采用Go語言開發(fā)的互聯(lián)網(wǎng)公司。Go1的目標(biāo)是梳理語法和標(biāo)準(zhǔn)庫陰暗的角落,為后續(xù)的10年打下堅實(shí)的基礎(chǔ)。
從目前的結(jié)果看,Go1無疑是取得了極大的成果,Go1時代的代碼依然可以不用修改就可以用最新的Go語言工具編譯構(gòu)建(不包含CGO或匯編語言部分,因?yàn)檫@些外延的工具并不在Go1的承諾范圍)。但是Go1之后依然有一些語法的更新,在Go1.10前的Go1時代語法和標(biāo)準(zhǔn)庫部分的重大變化主要有三個:
第一個重大的語法變化是在2012年發(fā)布的Go1.2中,給切片語法增加了容量的控制,這樣可以避免不同的切片不小心越界訪問有著相同底層數(shù)組的其它切片的內(nèi)存。
第二個重大的變化是2016年發(fā)布的Go1.7標(biāo)準(zhǔn)庫引入了context包。context包是Go語言官方對Go進(jìn)行并發(fā)編程的實(shí)踐成果,用來簡化對于處理單個請求的多個Goroutine之間與請求域的數(shù)據(jù)、超時和退出等操作。context包推出后就被社區(qū)快速吸收使用,例如gRPC以及很多Web框架都通過context來控制Goroutine的生命周期。
第三個重大的語法變化是2017年發(fā)布的Go1.9 ,引入了類型別名的特性:type T1 = T2。其中類型別名T1是通過=符號從T2定義,這里的T1和T2是完全相同的類型。之所以引入類型別名,很大的原因是為了解決Go1.7將context擴(kuò)展庫移動到標(biāo)準(zhǔn)庫帶來的問題。因?yàn)闃?biāo)準(zhǔn)庫和擴(kuò)展庫中分別定義了context.Context類型,而不同包中的類型是不相容的。而gRPC等很多開源的庫使用的是最開始以來的擴(kuò)展庫中的context.Context類型,結(jié)果導(dǎo)致其無法和Go1.7標(biāo)準(zhǔn)庫中的context.Context類型兼容。這個問題最終通過類型別名解決了:擴(kuò)展庫中的context.Context類型是標(biāo)準(zhǔn)庫中context.Context的別名類型,從而實(shí)現(xiàn)了和標(biāo)準(zhǔn)庫的兼容。
此外還有一些語法細(xì)節(jié)的變化,比如Go1.4對for循環(huán)語法進(jìn)行了增強(qiáng)、Go1.8放開對有著相同內(nèi)存布局的結(jié)構(gòu)體強(qiáng)制轉(zhuǎn)型限制。讀者可以根據(jù)自己新需要查看相關(guān)發(fā)布日志的文檔說明。
運(yùn)行時的變化
運(yùn)行時部分最大的變化是動態(tài)棧部分。在Go1.2之前Go語言采用分段棧的方式實(shí)現(xiàn)棧的動態(tài)伸縮。但是分段式動態(tài)棧有個性能問題,因?yàn)闂?nèi)存不連續(xù)會導(dǎo)致CPU緩存命中率下降,從而導(dǎo)致熱點(diǎn)的函數(shù)調(diào)用性能受到影響。因此從Go1.3開始該有連續(xù)式的動態(tài)棧。連續(xù)式的動態(tài)棧雖然部分緩解了CPU 緩存命中率問題(依然存在棧的切換問題,這可能導(dǎo)致CPU緩存失效),但同時也帶來了更大的實(shí)現(xiàn)問題:棧上變量的地址可能會隨著棧的移動而發(fā)生變化。這直接帶來了CGO編程中,Go語言內(nèi)存對象無法直接傳遞給C語言空間使用,因此后來Go語言官方針對CGO問題制定了復(fù)雜的內(nèi)存使用規(guī)范。
總體來說,動態(tài)棧如何實(shí)現(xiàn)是一個如何取舍的問題,因?yàn)闆]有銀彈、魚和熊掌不可兼得,目前的選擇是第一保證純Go程序的性能。
GC性能改進(jìn)
Go語言是一個帶自動垃圾回收的語言(Garbage Collection ),簡稱GC(注意這是大寫的GC,小寫的gc表示Go語言的編譯器)。從Go語言誕生開始,GC的回收性能就是大家關(guān)注的熱點(diǎn)話題。
Go語言之所以能夠支持GC特性,是因?yàn)镚o語言中每個變量都有完備的元信息,通過這些元信息可以很容易跟蹤全部指針的聲明周期。在Go1.4之前,GC采用的是STW停止世界的方式回收內(nèi)存,停頓的時間經(jīng)常是幾秒甚至達(dá)到幾十秒。因此早期社區(qū)有很多如何規(guī)避或降低GC操作的技巧文章。
第一次GC性能變革發(fā)生在Go1.5時期,這個時候Go語言的運(yùn)行時和工具鏈已經(jīng)全部從C語言改用Go語言實(shí)現(xiàn),為GC代碼的重構(gòu)和優(yōu)化提供了便利。Go1.5首次改用并行和增量的方式回收內(nèi)存,這將GC挺短時間縮短到幾百毫秒。下圖是官網(wǎng)“Go GC: Latency Problem Solved”一文給出的數(shù)據(jù):
Go1.5并發(fā)和增量的改進(jìn)效果明顯,但是最重要的是為未來的改進(jìn)奠定了基礎(chǔ)。在Go1.5之后的Go1.6版本中GC性能終于開始得到了徹底的提升:從Go1.6.0停頓時間降低到幾十毫秒,到Go1.6.3降低到了十毫秒以內(nèi)。而Go1.6取得的成果在Go1.8的官方日志得到證實(shí):Go語言的GC通常低于100毫秒,甚至低于10毫秒!
當(dāng)然,Go的GC優(yōu)化的腳步不會停止,但是想再現(xiàn)Go1.5和Go1.6時那種激動人心的成果估計比較難了。在Go1.8之后的幾個版本中,官方的發(fā)布日志已經(jīng)很少再出現(xiàn)量化的GC性能提升數(shù)據(jù)了。
Go語言自舉歷程
據(jù)說Go語言剛開始實(shí)現(xiàn)時是基于湯普森的C語言編譯改造而成,并且最開始輸出的是C語言代碼(還沒有對外公開之前)。在開源之后到Go1.4之前,Go語言的編譯器和運(yùn)行時都是采用C語言實(shí)現(xiàn)的。以至于早期可以用C語言實(shí)現(xiàn)一個Go語言函數(shù)!因?yàn)閺?qiáng)烈依賴C語言工具鏈,因此Go1.4之前Go語言是完全不能自舉的。
從Go1.4開始,Go語言的運(yùn)行時采用Go語言實(shí)現(xiàn)。具體實(shí)施的方式是Go團(tuán)隊的rsc首先實(shí)現(xiàn)了一個簡化的C代碼到Go代碼的轉(zhuǎn)換工具,這個工具主要用于將之前C語言實(shí)現(xiàn)的Go語言運(yùn)行時轉(zhuǎn)換為Go語言代碼。因?yàn)槭亲詣愚D(zhuǎn)換的代碼,因此可以得到比較可靠的Go代碼。運(yùn)行時轉(zhuǎn)換為Go語言實(shí)現(xiàn)之后,帶來的第一個好處就是GC可以精確知道每個內(nèi)存指針的狀態(tài)(因?yàn)镚o語言的變量有詳細(xì)的類型信息),這也為Go1.5重寫GC提供了運(yùn)行時基礎(chǔ)。
然后到了Go1.5,將編譯器也轉(zhuǎn)為Go語言實(shí)現(xiàn)。但是轉(zhuǎn)換到代碼性能有一定的下降。很多程序的編譯時間甚至緩慢到幾十秒,這個時期網(wǎng)上出現(xiàn)了很多吐槽Go1.5編譯速度慢的問題。Go1.5采用Go語言編寫編譯器的同時,對工具鏈和目標(biāo)代碼都做了大量的重構(gòu)工作。從Go1.5之后,交叉編譯變得異常簡單,只要GOOS=linux GOARCH=amd64 go build命令就可以從任何Go語言環(huán)境生成Linux/amd64的目標(biāo)代碼。
Go語言從Go1.4到Go1.5,經(jīng)歷了兩個版本的演化終于實(shí)現(xiàn)了自舉的支持。當(dāng)然自舉也會帶來一個哲學(xué)問題:Go語言的編譯器是否有后門?如果有后門的編譯器編譯出來的Go程序是否有后門?有后門的編譯器編譯出來的Go編譯器程序是否有后門?
失敗的嘗試
Go語言發(fā)展過程中也并不全是成功的案例,同時也存在一些失敗的嘗試。失敗乃成功之母,這些嘗試雖然最終失敗了,但是在嘗試的過程之中積累的經(jīng)驗(yàn)為新的方向提供了前進(jìn)的動力。
因?yàn)镚o語言的常量只支持?jǐn)?shù)值和字符串等少數(shù)幾個類型,早期的社區(qū)中一直呼吁為切片增加只讀類型。為此rsc在開發(fā)分支首先試驗(yàn)性地實(shí)現(xiàn)了該特性,但是在之后的實(shí)踐過程中又發(fā)現(xiàn)了和Go編程特性沖突的諸多問題,以至于在短暫的嘗試之后就放棄了只讀切片的特性。當(dāng)然,初始化之后不能修改的變量特性依然是大家期望的一個特性(類似其它語言的final特性),希望在未來的Go2中能有一定的改善。
另一個嘗試是早期基于vendor的版本管理。在Go1.5中首次引入vendor和internal特性,vendor用于打包外部第三方包,internal用戶保護(hù)內(nèi)部的包。后來vendor被開源社區(qū)的各種版本管理工具所濫用,導(dǎo)致Go語言代碼經(jīng)常會出現(xiàn)一些不可構(gòu)建的詭異問題。濫用vendor導(dǎo)致了vendor嵌套的問題,這和nodejs社區(qū)中node_modules目錄嵌套的問題類似。嵌套的vendor中最終會出現(xiàn)同一個包的不同版本,這根最后的稻草終于徹底擊潰了vendor機(jī)制,以至于Go語言官方團(tuán)隊從頭開發(fā)了模塊特性來徹底解決版本管理的問題。等到Go1.13模塊化特性轉(zhuǎn)正之中,GOPATH和vendor等機(jī)制將被徹底淘汰。
Go語言作為一個開源項目,所有導(dǎo)入的包必須有源代碼。一些號稱是商業(yè)用戶,呼吁Go語言支持二進(jìn)制包的導(dǎo)入,這樣可以最大限度地保護(hù)商業(yè)代碼。為了響應(yīng)社區(qū)的需求,Go1.7增加了導(dǎo)入二進(jìn)制包的功能。但是比較戲劇化的是,Go語言支持二進(jìn)制包導(dǎo)入之后并沒有多少人在使用,甚至當(dāng)初呼吁二進(jìn)制包的人也沒有使用(所以說很多社區(qū)的聲音未必能夠反映真實(shí)的需求)。為了一個沒有人使用的二進(jìn)制包特性,需要Go語言團(tuán)隊投入相當(dāng)?shù)娜肆M(jìn)行維護(hù)代碼。為了減少這種不需要的特性,Go1.13將徹底關(guān)閉二進(jìn)制包的特性,從新輕裝上陣解決真實(shí)的需求。當(dāng)然,Go語言也已經(jīng)支持了生成靜態(tài)庫、共享庫和插件的特性,也可以通過這些機(jī)制來保護(hù)代碼。
失敗的嘗試可能還有一些,比如最近Go語言之父之一Robert Griesemer提交的通過try內(nèi)置函數(shù)來簡化錯誤處理就被否決了。失敗的嘗試是一個好的現(xiàn)象,它表示Go語言依然在一些新興領(lǐng)域的嘗試——Go語言依然處于活躍期。
Go2的發(fā)展方向
Go語言原本就是短小精悍的語言,經(jīng)過多年的發(fā)展Go1已經(jīng)逼近穩(wěn)定的極限。查看官網(wǎng)的Talk頁面的報告數(shù)量可以發(fā)現(xiàn),2015年之前是各種報告的巔峰,2016到2017年分享數(shù)量已經(jīng)開始急劇下降,2018年至今已經(jīng)沒有新的報告被收錄,這是因?yàn)樵撝v的Go1語言特性早就被講過多次了。對于第一波Go語言愛好者來說也是如此,Go語言已經(jīng)沒有什么新的特性可以挖掘和學(xué)習(xí)了,或者說它已經(jīng)不夠酷了。我們想Go語言官方團(tuán)隊也是這樣的感覺,因此從2018年開始首先開始解決模塊化的問題,然后開始正式討論Go2的新特性,并且從Go1.13重新啟動語言的進(jìn)化。
模塊化和構(gòu)建管理有關(guān)系。在Go語言剛剛誕生之初,其實(shí)是通過一個Makefile目標(biāo)進(jìn)行構(gòu)建。然后官方提供了go build命令構(gòu)建,實(shí)現(xiàn)了零配置文件構(gòu)建,極大地簡化了構(gòu)建的流程。再后來出現(xiàn)了go get命令,支持從互聯(lián)網(wǎng)上自動下載hg或git倉庫的代碼進(jìn)行構(gòu)建,并同時引入GOPATH環(huán)境變量來防止非標(biāo)準(zhǔn)庫的代碼。此后,第一波的版本管理工具也開始出現(xiàn),通過動態(tài)調(diào)整GOPATH實(shí)現(xiàn)導(dǎo)入特定版本的代碼。隨后各種開源模仿、克隆的版本管理工具如雨后春筍般冒出來,基本都是模仿godeps的設(shè)計思路,基于GOPATH和后來的vendor來管理依賴包的版本,這也最終導(dǎo)致了vendor被過度濫用(前文已經(jīng)講過vendor濫用帶來的問題)。最終在2018年,由rsc親自操刀從頭發(fā)明了基于最小化版本依賴算法的版本管理特性。模塊化特性從Go1.11開始引入,將在Go1.13版本正式轉(zhuǎn)正,以后GOAPATH將徹底退出歷史舞臺。
因?yàn)閞sc的工作直接宣判了開源社區(qū)的各種版本管理工具的死亡,這也導(dǎo)致了Go語言官方團(tuán)隊和開源社區(qū)的諸多沖突和矛盾。在此需要補(bǔ)充說明下,Go語言的開發(fā)并不完全是開源陌生,Go語言的開源僅僅限于Issue的提交或BUG的修改,真正的語言設(shè)計始終走的是教堂元老會的模式。筆者以為這是最好的開源方式,很多開源社區(qū)的例子也說明了需要獨(dú)裁者的角色,而元老會正是這種角色。
在Go1.13中,除了模塊化特性轉(zhuǎn)正之外,還有諸多語法的改進(jìn):比如十六進(jìn)制的浮點(diǎn)數(shù)、大的數(shù)字可以通過下劃線進(jìn)行分隔、二進(jìn)制和八進(jìn)制的面值常量等。但是Go1.13還有一個重大的改進(jìn)發(fā)生在errors標(biāo)準(zhǔn)庫中。errors庫增加了Is/As/Unwrap三個函數(shù),這將用于支持錯誤的再次包裝和識別處理,是為了Go2中新的錯誤處理改進(jìn)提前做準(zhǔn)備。后續(xù)改進(jìn)方向就是錯誤處理的控制流,之前已經(jīng)出現(xiàn)用try/check關(guān)鍵字和try內(nèi)置函數(shù)改進(jìn)錯誤處理流程的提案,目前還沒有確定采用什么方案。
Go2最期待的特性是泛型。從開始Go語言官方明顯抵制泛型,到2018年開始公開討論泛型,讓泛型的愛好者看到了希望。很多人包括早期的Go官方都會說用接口模擬泛型,這其實(shí)只是一個借口。泛型最大的問題不在于性能,而是只有泛型才能夠?yàn)榉盒腿萜骰蛩惴ㄌ峁┮粋€類型安全的接口。比如一個Add(a, b T) T泛型函數(shù)是無法通過接口來實(shí)現(xiàn)對返回值類型的檢查的。如果Go語言支持了泛型,再結(jié)合Go語言匯編語言支持的AVX512指令,可以期待Go語言將在CPU運(yùn)算密集型領(lǐng)域占有一席之地,甚至以后會出現(xiàn)純Go語言的機(jī)器學(xué)習(xí)算法庫的實(shí)現(xiàn)。
最后一個值得關(guān)注的是Go語言對WebAssembly平臺的支持。根據(jù)Ending定律:一切可編譯為WebAssembly的,終將會被編譯為WebAssembly。2018年,F(xiàn)abrice Bellard大神基于WebAssembly技術(shù),將Windows 2000操作系統(tǒng)搬到了瀏覽器環(huán)境運(yùn)行。2019年出現(xiàn)了WebAssembly System Interface技術(shù),這很可能是一個更輕量化的Docker替代技術(shù)。而Go語言也出現(xiàn)了一個變異版本TinyGo,目標(biāo)就是為了更好地在WebAssembly或其它單片機(jī)等受限環(huán)境運(yùn)行Go程序。
Go語言在
回想Go語言剛面世時的第一個例子,是打印"Hello, 世界"。只可惜這里的“世界”并不是中文的“Hello, 世界”,而是日文的“Hello, 世界”。而日文還是基于中文漢字改造而來,這是整個中文世界的悲哀!
比較慶幸的是程序員比較給力,目前不僅僅是世界上Go語言關(guān)注度最高的,也是貢獻(xiàn)排名第二的。根據(jù)谷歌趨勢的數(shù)據(jù),Go語言在的關(guān)注度占全球的90%以上:
不僅僅是Go語言用戶,的Gopher對Go語言的貢獻(xiàn)也穩(wěn)居之后。其中韋京光早在2010年就深度參與Go語言開發(fā),將Go語言移植到Windows系統(tǒng)并實(shí)現(xiàn)了CGO支持。之后來自的Minux實(shí)現(xiàn)了iOS等諸多平臺的移植,并已經(jīng)正式加入Go語言開發(fā)團(tuán)隊。而目前Go語言貢獻(xiàn)者排名第一的是來自天津的史斌(benshi001),他的很多工作集中在編譯的優(yōu)化方面,在全球Go語言貢獻(xiàn)者排名第39位。
最早Go語言中文愛好者都是通過谷歌討論組golang-china討論,目前該討論組還陸續(xù)會有新的文章發(fā)布。然后到了2012年前后,因?yàn)橹T多因素國內(nèi)的討論開始集中到QQ群中(筆者在2010年建立了國內(nèi)第一個Go語言QQ討論群)。再往后就是微信各種論壇遍地開花了。十年來,Go語言中文社區(qū)也一直非?;钴S,社區(qū)人數(shù)穩(wěn)步增長。
向Go語言學(xué)習(xí)
候杰老師曾經(jīng)說過:勿在浮沙筑高臺。而互聯(lián)網(wǎng)公司的繁榮更多是在業(yè)務(wù)層面,底層的基石軟件幾乎沒有一個是所創(chuàng)造。作為一個嚴(yán)肅的軟件開發(fā)人員,我們需要向Go語言學(xué)習(xí),繼續(xù)扎實(shí)掌握底層的理論基礎(chǔ),不能只聚焦于業(yè)務(wù)層面,否則下次中美貿(mào)易戰(zhàn)的時候依然要被西方卡脖子。
經(jīng)過這么多年發(fā)展,的軟件行業(yè)已經(jīng)非常繁榮和成熟,同時很多軟件開發(fā)人員也開始進(jìn)入35歲的中年門檻。其實(shí)35歲正是軟件開發(fā)人員第二次職業(yè)生涯的開始,是開始形成自我創(chuàng)造力的時候。但是某些資本家短視的996或007等急功近利的福報觀點(diǎn)正導(dǎo)致軟件人員過早進(jìn)入未創(chuàng)新而衰的階段。的軟件工程師不應(yīng)該是碼農(nóng)、更不是碼畜牧,我們雖然不會喊口號但是始終在默默前行。
目前已經(jīng)有大量的軟件開發(fā)人員有能力參與基礎(chǔ)軟件的設(shè)計和開發(fā),正因?yàn)檫@一波腳踏實(shí)地程序開發(fā)人員的努力,我相信在下個十年我們可以Go得更遠(yuǎn)。
2016-2022 All Rights Reserved.平安財經(jīng)網(wǎng).復(fù)制必究 聯(lián)系QQ280 715 8082 備案號:閩ICP備19027007號-6
本站除標(biāo)明“本站原創(chuàng)”外所有信息均轉(zhuǎn)載自互聯(lián)網(wǎng) 版權(quán)歸原作者所有。