Go 简介、应用场景
Go 簡(jiǎn)介、應(yīng)用場(chǎng)景
一. go語(yǔ)言的優(yōu)勢(shì)
1.并發(fā)性能好
基于goroutine(協(xié)程) 的并發(fā),可以將 goroutine 理解為一種虛擬線程。Go 語(yǔ)言運(yùn)行時(shí)會(huì)參與調(diào)度 goroutine,并將 goroutine 合理地分配到每個(gè) CPU 中,最大限度地使用CPU性能。開啟一個(gè)goroutine的消耗非常小(大約2KB的內(nèi)存),你可以輕松創(chuàng)建數(shù)百萬(wàn)個(gè)goroutine。goroutine的特點(diǎn):
2.性能強(qiáng)悍
處理器只能理解二進(jìn)制文件,Java和Python這種高級(jí)語(yǔ)言在運(yùn)行的時(shí)候需要先將人類可讀的代碼翻譯成字節(jié)碼,然后由專門的解釋器再轉(zhuǎn)變成處理器可以理解的二進(jìn)制文件。go是編譯型的語(yǔ)言,它直接將人類可讀的代碼編譯成了處理器可以直接運(yùn)行的二進(jìn)制文件,執(zhí)行效率更高,性能更好。
3. 語(yǔ)法簡(jiǎn)潔
4.代碼風(fēng)格統(tǒng)一
Go 語(yǔ)言提供了一套格式化工具——go fmt。一些 Go 語(yǔ)言的開發(fā)環(huán)境或者編輯器在保存時(shí),都會(huì)使用格式化工具進(jìn)行修改代碼的格式化,這樣就保證了不同開發(fā)者提交的代碼都是統(tǒng)一的格式。
5.開發(fā)效率高
二. go語(yǔ)言的歷史
2007年9月,Rob Pike在Google分布式編譯平臺(tái)上進(jìn)行C++編譯,在漫長(zhǎng)的等待過程中,他和Robert Griesemer探討了程序設(shè)計(jì)語(yǔ)言的一些關(guān)鍵性問題,他們認(rèn)為,簡(jiǎn)化編程語(yǔ)言相比于在臃腫的語(yǔ)言上不斷增加新特性,會(huì)是更大的進(jìn)步。隨后他們?cè)诰幾g結(jié)束之前說服了身邊的Ken Thompson,覺得有必要為此做一些事情。幾天后,他們發(fā)起了一個(gè)叫Golang的項(xiàng)目,將它作為自由時(shí)間的實(shí)驗(yàn)項(xiàng)目。
2008年5月 Google發(fā)現(xiàn)了GO語(yǔ)言的巨大潛力,得到了Google的全力支持,這些人開始全職投入GO語(yǔ)言的設(shè)計(jì)和開發(fā)。
2009年11月 GO語(yǔ)言第一個(gè)版本發(fā)布。2012年3月 第一個(gè)正式版本Go1.0發(fā)布。
2015年8月 go1.5發(fā)布,這個(gè)版本被認(rèn)為是歷史性的。完全移除C語(yǔ)言部分,使用GO編譯GO,少量代碼使用匯編實(shí)現(xiàn)。另外,他們請(qǐng)來(lái)了內(nèi)存管理方面的權(quán)威專家Rick Hudson,對(duì)GC進(jìn)行了重新設(shè)計(jì),支持并發(fā)GC,解決了一直以來(lái)廣為詬病的GC時(shí)延(STW)問題。并且在此后的版本中,又對(duì)GC做了更進(jìn)一步的優(yōu)化。到go1.8時(shí),相同業(yè)務(wù)場(chǎng)景下的GC時(shí)延已經(jīng)可以從go1.1的數(shù)秒,控制在1ms以內(nèi)。GC問題的解決,可以說GO語(yǔ)言在服務(wù)端開發(fā)方面,幾乎抹平了所有的弱點(diǎn)。
在GO語(yǔ)言的版本迭代過程中,語(yǔ)言特性基本上沒有太大的變化,基本上維持在GO1.1的基準(zhǔn)上,并且官方承諾,新版本對(duì)老版本下開發(fā)的代碼完全兼容。事實(shí)上,GO開發(fā)團(tuán)隊(duì)在新增語(yǔ)言特性上顯得非常謹(jǐn)慎,而在穩(wěn)定性、編譯速度、執(zhí)行效率以及GC性能等方面進(jìn)行了持續(xù)不斷的優(yōu)化。
三.go語(yǔ)言目前的應(yīng)用
- nsq:bitly開源的消息隊(duì)列系統(tǒng),性能非常高,目前他們每天處理數(shù)十億條的消息
- docker:基于lxc的一個(gè)虛擬打包工具,能夠?qū)崿F(xiàn)PAAS平臺(tái)的組建。
- k8s: 當(dāng)下最流行的容器管理工具k8s也是基于go實(shí)現(xiàn)
- packer:用來(lái)生成不同平臺(tái)的鏡像文件,例如VM、vbox、AWS等,作者是vagrant的作者
- skynet:分布式調(diào)度框架
- Doozer:分布式同步工具,類似ZooKeeper
- Heka:mazila開源的日志處理系統(tǒng)
- cbfs:couchbase開源的分布式文件系統(tǒng)
- tsuru:開源的PAAS平臺(tái),和SAE實(shí)現(xiàn)的功能一模一樣
- groupcache:memcahe作者寫的用于Google下載系統(tǒng)的緩存系統(tǒng)
- god:類似redis的緩存系統(tǒng),但是支持分布式和擴(kuò)展性
- gor:網(wǎng)絡(luò)流量抓包和重放工具
四.Go適合用來(lái)做什么
- 服務(wù)器編程,以前你如果使用C或者C++做的那些事情,用Go來(lái)做很合適,例如處理日志、數(shù)據(jù)打包、虛擬機(jī)處理、文件系統(tǒng)等。
- 分布式系統(tǒng),數(shù)據(jù)庫(kù)代理器等
- 網(wǎng)絡(luò)編程,這一塊目前應(yīng)用最廣,包括Web應(yīng)用、API應(yīng)用、下載應(yīng)用、
- 內(nèi)存數(shù)據(jù)庫(kù),前一段時(shí)間google開發(fā)的groupcache,couchbase的部分組建
- 云平臺(tái),目前國(guó)外很多云平臺(tái)在采用Go開發(fā),CloudFoundy的部分組建,前VMare的技術(shù)總監(jiān)自己出來(lái)搞的apcera云平臺(tái)
總結(jié)
以上是生活随笔為你收集整理的Go 简介、应用场景的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RouterOS-注册及申请licens
- 下一篇: 百度路书 设置autoView为true