Go語言由Google公司開發(fā),并于2009年開源,相比Java/Python/C等語言,Go尤其擅長(zhǎng)并發(fā)編程,性能堪比C語言,開發(fā)效率肩比Python,被譽(yù)為“21世紀(jì)的C語言”。
創(chuàng)新互聯(lián)公司自2013年起,先為寧武等服務(wù)建站,寧武等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為寧武企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
Go語言在云計(jì)算、大數(shù)據(jù)、微服務(wù)、高并發(fā)領(lǐng)域應(yīng)用應(yīng)用非常廣泛。BAT大廠正在把Go作為新項(xiàng)目開發(fā)的首選語言。
Go語言能干什么?
1、服務(wù)端開發(fā):以前你使用C或者C++做的那些事情,用Go來做很合適,例如日志處理、文件系統(tǒng)、監(jiān)控系統(tǒng)等;
2、DevOps:運(yùn)維生態(tài)中的Docker、K8s、prometheus、grafana、open-falcon等都是使用Go語言開發(fā);
3、網(wǎng)絡(luò)編程:大量?jī)?yōu)秀的Web框架如Echo、Gin、Iris、beego等,而且Go內(nèi)置的 net/http包十分的優(yōu)秀;
4、Paas云平臺(tái)領(lǐng)域:Kubernetes和Docker Swarm等;
5、分布式存儲(chǔ)領(lǐng)域:etcd、Groupcache、TiDB、Cockroachdb、Influxdb等;
6、區(qū)塊鏈領(lǐng)域:區(qū)塊鏈里面有兩個(gè)明星項(xiàng)目以太坊和fabric都使用Go語言;
7、容器虛擬化:大名鼎鼎的Docker就是使用Go語言實(shí)現(xiàn)的;
8、爬蟲及大數(shù)據(jù):Go語言天生支持并發(fā),所以十分適合編寫分布式爬蟲及大數(shù)據(jù)處理。
軟件是用編程軟件寫成的,那么編程軟件是怎么來的呢?
這個(gè)吧,我真的沒辦法一個(gè)個(gè)給你解釋到底,不然你要是打破沙鍋問到底,可能一頓火鍋的功夫我也沒辦法給你說完。舉個(gè)例子哈,IntelliJIDEA和Eclipse都是Java的IDE,用這兩個(gè)IDE可以寫非常多的軟件,比如AndroidStudio先后分別基于這兩個(gè)軟件,Android上所有的軟件都是用這玩意兒開發(fā)的,但是這兩個(gè)IDE本身也都是Java語言開發(fā)的,這兩個(gè)IDE呢最初肯定是在Vim/Emacs+Java開發(fā)的,咱就先說到這里,不然要喋喋不休了。
我給大家提一個(gè)思路,大家按照這個(gè)思路可以自己去找自己感興趣的問題。我給大家說一說Google實(shí)現(xiàn)Go1.5自舉、去除所有的C語言程序的過程,大家慢慢就明白了,基本上計(jì)算機(jī)技術(shù)都是這樣迭代出來的,比如怎么先有了C語言、現(xiàn)有了Unix,又如何在這些基礎(chǔ)上,誕生了Emacs、C++等眾多新的軟件和技術(shù)。
事實(shí)上現(xiàn)在所有新的編程語言,基本上都會(huì)考慮在C語言的基礎(chǔ)之上構(gòu)建,Go語言也不例外,何況Go語言的重要設(shè)計(jì)者之一肯湯普森老爺子,還是C語言、Unix之父。Go語言發(fā)展的第一階段,就是開發(fā)一個(gè)從C語言到Go語言的翻譯器,將C語言編譯器翻譯成Go語言的,不過了Go語言核心設(shè)計(jì)團(tuán)隊(duì)的三位大神非常機(jī)智,他們最大程度避免了在Go語言編譯器設(shè)計(jì)中,大量使用未來很難移植到Go語言的一些特性,比如宏、比如指針,這些都是C、C++留下的一些糟糕的設(shè)計(jì),不符合現(xiàn)在的編程語言設(shè)計(jì)潮流。轉(zhuǎn)換編譯器源碼樹產(chǎn)生一個(gè)Go語言編譯器,不過這時(shí)候還是典型C語言風(fēng)格。
接下來,Google對(duì)編譯器進(jìn)行了優(yōu)化,將編譯器CPU、內(nèi)存等硬件資源占用的問題解決了,并且引入了并行概念。為了改進(jìn)編譯器在消除邊界檢查等問題下的能力,同時(shí)在不依賴架構(gòu)的node*s、prog*s之間引入一個(gè)中間表示。這些事情完成之后,Google就做了最后一步,用Go1.5、也就是當(dāng)時(shí)Go語言最新版本,用go/parser和go/types替換了編譯器前端,至此Go語言實(shí)現(xiàn)了自舉,并且獲得了一個(gè)穩(wěn)定高效的編譯器實(shí)現(xiàn)。
Go語言本身編程難度要比C更簡(jiǎn)單,這是因?yàn)镚o語言跟很多高級(jí)語言一樣,摒棄了指針、規(guī)避了內(nèi)存泄漏、解決了緩沖區(qū)溢出,深度遞歸時(shí)棧的溢出,摒棄了宏這些定義。Go語言工具鏈對(duì)模塊化、單元測(cè)試、以及性能分析支持更好,在修改內(nèi)部API或重構(gòu)時(shí),應(yīng)用自動(dòng)化程序重構(gòu)前景更加值得期待。
你看這就是Go語言從C語言寫編譯器,到最終實(shí)現(xiàn)Go語言完全自舉的過程,當(dāng)然大家都知道圖靈完備的編程語言都可以實(shí)現(xiàn)自舉,理論上符合圖靈完備的編程語言都是這么發(fā)展的,C++就是這么發(fā)展的,滿足這個(gè)條件的編程語言,你才能作為其他編程語言的基礎(chǔ)。
那么我們回到最初的問題上,編寫軟件的編程軟件又是在什么環(huán)境下開發(fā)的呢?計(jì)算機(jī)技術(shù)發(fā)展至今,在機(jī)器語言的基礎(chǔ)上,弄出了匯編語言,接著兩位祖師爺弄了C語言和Unix系統(tǒng),接著在這個(gè)基礎(chǔ)上,又有人弄了Emacs、Vim、GCC,你看基本上現(xiàn)代計(jì)算機(jī)技術(shù)的所有根基技術(shù)就有了。
接著就是用C語言寫各種操作系統(tǒng),為了各種需求寫各種編程語言,又根據(jù)各種需求開發(fā)各種集成開發(fā)環(huán)境,然后又根據(jù)各種應(yīng)用需求用集成開發(fā)環(huán)境寫其他應(yīng)用軟件,這就是一個(gè)完整的計(jì)算機(jī)技術(shù)發(fā)展進(jìn)化流程。
編程軟件也是,先有了機(jī)器語言,打孔時(shí)代創(chuàng)造和發(fā)明了匯編語言,匯編語言的基礎(chǔ)上又有了B語言,然后B語言的基礎(chǔ)上發(fā)明了C語言,C語言重寫Unix,于是現(xiàn)代計(jì)算機(jī)的雛形也就有了。早期是一生一、機(jī)器語言生匯編,然后機(jī)器和匯編語言生C語言,到C語言時(shí)代就是一生萬物、C語言生萬物,現(xiàn)在就是多生萬物。這就是計(jì)算機(jī)技術(shù)發(fā)展的過程。
Go語言是谷歌2009發(fā)布的編程語言,這個(gè)語言發(fā)明的目的,就是為了在運(yùn)行速度接近C/C++語言的基礎(chǔ)上(注意是接近),降低開發(fā)者的門檻,減少開發(fā)難度。Go語言,在功能上沒有超過C/C++,適用者為沒有C/C++經(jīng)驗(yàn)的開發(fā)者,開發(fā)出接近C效率的程序。對(duì)于已經(jīng)熟練掌握C/C++的開發(fā)者來說,Go語言沒有優(yōu)勢(shì),還要重學(xué)語法,適應(yīng)開發(fā)環(huán)境,明顯是不符合效率的。
Go語言的創(chuàng)始人是Rob Pike、Ken Thompson和Robert Griesemer。他們?cè)贕oogle工作時(shí),于2007年開始設(shè)計(jì)和開發(fā)該語言,稱之為"Go"。Go語言于2009年正式發(fā)布,并推廣到全球。現(xiàn)在,Go語言已成為一種流行的編程語言,廣泛應(yīng)用于云計(jì)算、分布式系統(tǒng)、網(wǎng)絡(luò)編程、人工智能等領(lǐng)域。