Go語(yǔ)言主要用作服務(wù)器端開(kāi)發(fā),其定位是用來(lái)開(kāi)發(fā)“大型軟件”的,適合于需要很多程序員一起開(kāi)發(fā),并且開(kāi)發(fā)周期較長(zhǎng)的大型軟件和支持云計(jì)算的網(wǎng)絡(luò)服務(wù)。
10余年的崆峒網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)營(yíng)銷(xiāo)推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整崆峒建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“崆峒網(wǎng)站設(shè)計(jì)”,“崆峒網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
Go語(yǔ)言融合了傳統(tǒng)編譯型語(yǔ)言的高效性和腳本語(yǔ)言的易用性和富于表達(dá)性,不僅提高了項(xiàng)目的開(kāi)發(fā)速度,而且后期維護(hù)起來(lái)也非常輕松。
編譯器
當(dāng)前有兩個(gè)Go編譯器分支,分別為官方編譯器gc和gccgo。官方編譯器在初期使用C寫(xiě)成,后用Go重寫(xiě)從而實(shí)現(xiàn)自舉。Gccgo是一個(gè)使用標(biāo)準(zhǔn)GCC作為后端的Go編譯器。
官方編譯器支持跨平臺(tái)編譯(但不支持CGO),允許將源代碼編譯為可在目標(biāo)系統(tǒng)、架構(gòu)上執(zhí)行的二進(jìn)制文件。
1、服務(wù)器編程:以前你如果使用C或者C++做的那些事情,用Go來(lái)做很合適,例如處理日志、數(shù)據(jù)打包、虛擬機(jī)處理、文件系統(tǒng)等。
2、分布式系統(tǒng)、數(shù)據(jù)庫(kù)代理器、中間件:例如Etcd。
3、網(wǎng)絡(luò)編程:這一塊目前應(yīng)用最廣,包括Web應(yīng)用、API應(yīng)用、下載應(yīng)用,而且Go內(nèi)置的net/http包基本上把我們平常用到的網(wǎng)絡(luò)功能都實(shí)現(xiàn)了。
4、開(kāi)發(fā)云平臺(tái):目前國(guó)外很多云平臺(tái)在采用Go開(kāi)發(fā),我們所熟知的七牛云、華為云等等都有使用Go進(jìn)行開(kāi)發(fā)并且開(kāi)源的成型的產(chǎn)品。
5、區(qū)塊鏈:目前有一種說(shuō)法,技術(shù)從業(yè)人員把Go語(yǔ)言稱(chēng)作為區(qū)塊鏈行業(yè)的開(kāi)發(fā)語(yǔ)言。如果大家學(xué)習(xí)區(qū)塊鏈技術(shù)的話,就會(huì)發(fā)現(xiàn)現(xiàn)在有很多很多的區(qū)塊鏈的系統(tǒng)和應(yīng)用都是采用Go進(jìn)行開(kāi)發(fā)的,比如ehtereum是目前知名度最大的公鏈,再比如fabric是目前最知名的聯(lián)盟鏈,兩者都有g(shù)o語(yǔ)言的版本,且go-ehtereum還是以太坊官方推薦的版本。
自1.0版發(fā)布以來(lái),go語(yǔ)言引起了眾多開(kāi)發(fā)者的關(guān)注,并得到了廣泛的應(yīng)用。go語(yǔ)言簡(jiǎn)單、高效、并發(fā)的特點(diǎn)吸引了許多傳統(tǒng)的語(yǔ)言開(kāi)發(fā)人員,其數(shù)量也在不斷增加。
使用 Go 語(yǔ)言開(kāi)發(fā)的開(kāi)源項(xiàng)目非常多。早期的 Go 語(yǔ)言開(kāi)源項(xiàng)目只是通過(guò) Go 語(yǔ)言與傳統(tǒng)項(xiàng)目進(jìn)行C語(yǔ)言庫(kù)綁定實(shí)現(xiàn),例如 Qt、Sqlite 等。
后期的很多項(xiàng)目都使用 Go 語(yǔ)言進(jìn)行重新原生實(shí)現(xiàn),這個(gè)過(guò)程相對(duì)于其他語(yǔ)言要簡(jiǎn)單一些,這也促成了大量使用 Go 語(yǔ)言原生開(kāi)發(fā)項(xiàng)目的出現(xiàn)。
Go語(yǔ)言由Google公司開(kāi)發(fā),并于2009年開(kāi)源,相比Java/Python/C等語(yǔ)言,Go尤其擅長(zhǎng)并發(fā)編程,性能堪比C語(yǔ)言,開(kāi)發(fā)效率肩比Python,被譽(yù)為“21世紀(jì)的C語(yǔ)言”。
Go語(yǔ)言在云計(jì)算、大數(shù)據(jù)、微服務(wù)、高并發(fā)領(lǐng)域應(yīng)用應(yīng)用非常廣泛。BAT大廠正在把Go作為新項(xiàng)目開(kāi)發(fā)的首選語(yǔ)言。
Go語(yǔ)言應(yīng)用范圍:
1、服務(wù)端開(kāi)發(fā):以前你使用C或者C++做的那些事情,用Go來(lái)做很合適,例如日志處理、文件系統(tǒng)、監(jiān)控系統(tǒng)等;
2、DevOps:運(yùn)維生態(tài)中的Docker、K8s、prometheus、grafana、open-falcon等都是使用Go語(yǔ)言開(kāi)發(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語(yǔ)言;
7、容器虛擬化:大名鼎鼎的Docker就是使用Go語(yǔ)言實(shí)現(xiàn)的;
8、爬蟲(chóng)及大數(shù)據(jù):Go語(yǔ)言天生支持并發(fā),所以十分適合編寫(xiě)分布式爬蟲(chóng)及大數(shù)據(jù)處理。
部署簡(jiǎn)單。Go編譯生成的是一個(gè)靜態(tài)可執(zhí)行文件,除了glibc外沒(méi)有其他外部依賴(lài)。這讓部署變得異常方便:目標(biāo)機(jī)器上只需要一個(gè)基礎(chǔ)的系統(tǒng)和必要的管理、監(jiān)控工具,完全不需要操心應(yīng)用所需的各種包、庫(kù)的依賴(lài)關(guān)系,大大減輕了維護(hù)的負(fù)擔(dān)。這和Python有著巨大的區(qū)別。由于歷史的原因,Python的部署工具生態(tài)相當(dāng)混亂【比如setuptools,distutils,pip,
buildout的不同適用場(chǎng)合以及兼容性問(wèn)題】。官方PyPI源又經(jīng)常出問(wèn)題,需要搭建私有鏡像,而維護(hù)這個(gè)鏡像又要花費(fèi)不少時(shí)間和精力。
并發(fā)性好。Goroutine和channel使得編寫(xiě)高并發(fā)的服務(wù)端軟件變得相當(dāng)容易,很多情況下完全不需要考慮鎖機(jī)制以及由此帶來(lái)的各種問(wèn)題。單個(gè)Go應(yīng)用也能有效的利用多個(gè)CPU核,并行執(zhí)行的性能好。這和Python也是天壤之比。多線程和多進(jìn)程的服務(wù)端程序編寫(xiě)起來(lái)并不簡(jiǎn)單,而且由于全局鎖GIL的原因,多線程的Python程序并不能有效利用多核,只能用多進(jìn)程的方式部署;如果用標(biāo)準(zhǔn)庫(kù)里的multiprocessing包又會(huì)對(duì)監(jiān)控和管理造成不少的挑戰(zhàn)【我們用的supervisor管理進(jìn)程,對(duì)fork支持不好】。部署Python應(yīng)用的時(shí)候通常是每個(gè)CPU核部署一個(gè)應(yīng)用,這會(huì)造成不少資源的浪費(fèi),比如假設(shè)某個(gè)Python應(yīng)用啟動(dòng)后需要占用100MB內(nèi)存,而服務(wù)器有32個(gè)CPU核,那么留一個(gè)核給系統(tǒng)、運(yùn)行31個(gè)應(yīng)用副本就要浪費(fèi)3GB的內(nèi)存資源。
良好的語(yǔ)言設(shè)計(jì)。從學(xué)術(shù)的角度講Go語(yǔ)言其實(shí)非常平庸,不支持許多高級(jí)的語(yǔ)言特性;但從工程的角度講,Go的設(shè)計(jì)是非常優(yōu)秀的:規(guī)范足夠簡(jiǎn)單靈活,有其他語(yǔ)言基礎(chǔ)的程序員都能迅速上手。更重要的是Go自帶完善的工具鏈,大大提高了團(tuán)隊(duì)協(xié)作的一致性。比如gofmt自動(dòng)排版Go代碼,很大程度上杜絕了不同人寫(xiě)的代碼排版風(fēng)格不一致的問(wèn)題。把編輯器配置成在編輯存檔的時(shí)候自動(dòng)運(yùn)行g(shù)ofmt,這樣在編寫(xiě)代碼的時(shí)候可以隨意擺放位置,存檔的時(shí)候自動(dòng)變成正確排版的代碼。此外還有g(shù)ofix,
govet等非常有用的工具。
執(zhí)行性能好。雖然不如C和Java,但通常比原生Python應(yīng)用還是高一個(gè)數(shù)量級(jí)的,適合編寫(xiě)一些瓶頸業(yè)務(wù)。內(nèi)存占用也非常省。
1、學(xué)習(xí)曲線
它包含了類(lèi)C語(yǔ)法、GC內(nèi)置和工程工具。這一點(diǎn)非常重要,因?yàn)镚o語(yǔ)言容易學(xué)習(xí),所以一個(gè)普通的大學(xué)生花一個(gè)星期就能寫(xiě)出來(lái)可以上手的、高性能的應(yīng)用。在國(guó)內(nèi)大家都追求快,這也是為什么國(guó)內(nèi)Go流行的原因之一。
2、效率
Go擁有接近C的運(yùn)行效率和接近PHP的開(kāi)發(fā)效率,這就很有利的支撐了上面大家追求快速的需求。
3、出身名門(mén)、血統(tǒng)純正
之所以說(shuō)Go語(yǔ)言出身名門(mén),是因?yàn)槲覀冎繥o語(yǔ)言出自Google公司,這個(gè)公司在業(yè)界的知名度和實(shí)力自然不用多說(shuō)。Google公司聚集了一批牛人,在各種編程語(yǔ)言稱(chēng)雄爭(zhēng)霸的局面下推出新的編程語(yǔ)言,自然有它的戰(zhàn)略考慮。而且從Go語(yǔ)言的發(fā)展態(tài)勢(shì)來(lái)看,Google對(duì)它這個(gè)新的寵兒還是很看重的,Go自然有一個(gè)良好的發(fā)展前途。我們看看Go語(yǔ)言的主要?jiǎng)?chuàng)造者,血統(tǒng)純正這點(diǎn)就可見(jiàn)端倪了。
4、組合的思想、無(wú)侵入式的接口
Go語(yǔ)言可以說(shuō)是開(kāi)發(fā)效率和運(yùn)行效率二者的完美融合,天生的并發(fā)編程支持。Go語(yǔ)言支持當(dāng)前所有的編程范式,包括過(guò)程式編程、面向?qū)ο缶幊桃约昂瘮?shù)式編程。
5、強(qiáng)大的標(biāo)準(zhǔn)庫(kù)
這包括互聯(lián)網(wǎng)應(yīng)用、系統(tǒng)編程和網(wǎng)絡(luò)編程。Go里面的標(biāo)準(zhǔn)庫(kù)基本上已經(jīng)是非常穩(wěn)定,特別是我這里提到的三個(gè),網(wǎng)絡(luò)層、系統(tǒng)層的庫(kù)非常實(shí)用。
6、部署方便
我相信這一點(diǎn)是很多人選擇Go的最大理由,因?yàn)椴渴鹛奖?,所以現(xiàn)在也有很多人用Go開(kāi)發(fā)運(yùn)維程序。
7、簡(jiǎn)單的并發(fā)
它包含降低心智的并發(fā)和簡(jiǎn)易的數(shù)據(jù)同步,我覺(jué)得這是Go最大的特色。之所以寫(xiě)正確的并發(fā)、容錯(cuò)和可擴(kuò)展的程序如此之難,是因?yàn)槲覀冇昧隋e(cuò)誤的工具和錯(cuò)誤的抽象,Go可以說(shuō)這一塊做的相當(dāng)簡(jiǎn)單。
8、穩(wěn)定性
Go擁有強(qiáng)大的編譯檢查、嚴(yán)格的編碼規(guī)范和完整的軟件生命周期工具,具有很強(qiáng)的穩(wěn)定性,穩(wěn)定壓倒一切。那么為什么Go相比于其他程序會(huì)更穩(wěn)定呢?這是因?yàn)镚o提供了軟件生命周期的各個(gè)環(huán)節(jié)的工具,如go
tool、gofmt、go test。