我是從2016年5月開始用Go開發(fā)的环础,在這之前用了十年左右的C/C++和4年左右的Java囚似,偶爾也用Python做點小項目。今天想跟大家聊一聊线得,用Go做互聯(lián)網(wǎng)后臺開發(fā)的好處饶唤。
什么是Go
Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.
這是Go官網(wǎng)對Go的定義,翻譯過來就是:Go是一門開源的編程語言贯钩,Go讓編寫簡潔募狂、可依賴和高效的軟件變得簡單。
Go是2007年在Google被發(fā)明的角雷,2012年3月28日發(fā)布了1.0版本熬尺,現(xiàn)在已更新到1.8版本了。發(fā)明人中就有程序員的男神Ken Thompson谓罗,他在1969年和Dennis Ritchie 一起設(shè)計和實現(xiàn)了Unix操作系統(tǒng)粱哼。
誰在用Go
從TIOBE給出的2017年5月編程語言排名來看,Go是增長最快的語言檩咱,一年內(nèi)+1.83%并且從42名提升至16名揭措。
2012年,七牛就已經(jīng)在用了刻蚯,核心系統(tǒng)也是用Go實現(xiàn)绊含,七牛的創(chuàng)始人許世偉是Go在國內(nèi)的布道者。現(xiàn)在國內(nèi)用Go的不少炊汹,看到BAT某部門的后臺開發(fā)崗位躬充,要求應(yīng)聘者有Go開發(fā)經(jīng)驗。
現(xiàn)在很火的微服務(wù)的兩大基礎(chǔ)組件:Docker和Kubernetes都是用Go實現(xiàn)的。
Go的優(yōu)勢
1, Concurrency的原生支持
通過語言原生的Goroutine和Channel充甚,很好的支持了Concurrency以政。你可以把Goroutine理解為非常輕量級的Thread。
- 一個Goroutine只占用2KB的內(nèi)存伴找,但是一個Thread要占用1MB的內(nèi)存盈蛮。
- Goroutine的創(chuàng)建、銷毀和切換的開銷技矮,相對于線程來說特別低抖誉。你可以隨時起上千個Goroutine,這會讓你的編碼變得異常簡單衰倦。
- Go runtime處理所有跟Goroutine相關(guān)的操作袒炉,實際上Goroutine也是跑在操作系統(tǒng)的Thread上。
2, Go的依賴管理
對于C/C++和Java而言樊零,依賴管理是一個讓大多數(shù)新手抓狂的問題我磁,你需要去編寫CMakeLists.txt/Makefile或配置Maven。
Go的依賴管理很簡單:
- 定義一個根目錄$GOROOT淹接,來保存你所有的代碼十性。
- 你的代碼和依賴,按照Go的約定塑悼,放在固定的相對路徑下劲适。go get命令能幫你下載所有依賴的package。
Go也有一些依賴管理的工具厢蒜,我現(xiàn)在用的是glide霞势。
3, 靜態(tài)鏈接
部署C/C++服務(wù)的朋友一定很熟悉靜態(tài)鏈接和動態(tài)鏈接的概念。服務(wù)器部署的時候斑鸦,動態(tài)鏈接庫的管理也是個很麻煩的事情愕贡,經(jīng)常本地可以跑的,換個服務(wù)器就不行了巷屿。Docker的出現(xiàn)固以,一定程度上簡化了這個問題。
Go默認(rèn)使用靜態(tài)鏈接的方式編譯嘱巾,所以在部署的時候特別方便憨琳,只需要拷貝單個二進(jìn)制文件就可以了。
4, Go的工具鏈
Go官方支持的工具鏈很齊全很好用旬昭,常用的包括測試篙螟,Benchmark,性能調(diào)優(yōu)等问拘。一個成熟的開發(fā)流程中遍略,編碼只會占用少量時間惧所,更多時間都花費(fèi)在測試和調(diào)優(yōu)上,所以好用的工具鏈對提升效率很重要绪杏。
5, Go的社區(qū)
Go背后有Google撐腰下愈,同時也有一個非常健康和活躍的開源社區(qū)。官方package本身就很強(qiáng)大寞忿,社區(qū)還貢獻(xiàn)了大量好用的組件驰唬。另外Go的文檔和優(yōu)秀的Blog也很多顶岸,學(xué)習(xí)成本較低腔彰。
在后臺開發(fā)中,除了一些特定的場景需要用C/C++辖佣,比如CUDA霹抛、CPU密集的或IO密集的以外,其他的都可以嘗試用Go卷谈。