為什么要學(xué)習(xí)Go語言
Go語言簡(jiǎn)介
Go語言(或 Golang)是Google開發(fā)的開源編程語言,誕生于2007年,并于2009年11月開源,2012年發(fā)布Go穩(wěn)定版。Go語言在多核并發(fā)上擁有原生的設(shè)計(jì)優(yōu)勢(shì),Go語言從底層原生支持并發(fā),無須第三方庫、開發(fā)者的編程技巧和開發(fā)經(jīng)驗(yàn)。
Go語言是編程語言設(shè)計(jì)的又一次嘗試,它的主要目標(biāo)是兼具Python 等動(dòng)態(tài)語言的開發(fā)速度和C/C++等編譯型語言的性能與安全性,對(duì)類C語言的重大改進(jìn),它不但能讓你訪問底層操作系統(tǒng),還提供了強(qiáng)大的網(wǎng)絡(luò)編程和并發(fā)編程支持。Go語言的用途眾多,可以進(jìn)行網(wǎng)絡(luò)編程、系統(tǒng)編程、并發(fā)編程、分布式編程。
Go語言的推出,旨在不損失應(yīng)用程序性能的情況下降低代碼的復(fù)雜性,具有“部署簡(jiǎn)單、并發(fā)性好、語言設(shè)計(jì)良好、執(zhí)行性能好”等優(yōu)勢(shì),目前國內(nèi)諸多 IT 公司均已采用Go語言開發(fā)項(xiàng)目。
并發(fā)編程
經(jīng)過 Go 語言重構(gòu)的系統(tǒng)能使用更少的硬件資源獲得更高的并發(fā)和I/O吞吐表現(xiàn)。充分挖掘硬件設(shè)備的潛力也滿足當(dāng)前精細(xì)化運(yùn)營的市場(chǎng)大環(huán)境。
Go語言的并發(fā)是基于 Goroutine 的,Goroutine 類似于線程,但并非線程??梢詫?Goroutine 理解為一種虛擬線程。Go 語言運(yùn)行時(shí)會(huì)參與調(diào)度 Goroutine,并將 Goroutine 合理地分配到每個(gè) CPU 中,最大限度地使用CPU性能。開啟一個(gè)Goroutine的消耗非常?。ù蠹s2KB的內(nèi)存),你可以輕松創(chuàng)建數(shù)百萬個(gè)Goroutine。
Goroutine 的特點(diǎn)
- Goroutine 具有可增長(zhǎng)的分段堆棧, 這意味著它們只在需要時(shí)才會(huì)使用更多內(nèi)存。
- Goroutine 的啟動(dòng)時(shí)間比線程快。
- Goroutine 原生支持利用channel安全地進(jìn)行通信。
- Goroutine 共享數(shù)據(jù)結(jié)構(gòu)時(shí)無需使用互斥鎖。
Go 是編譯型語言
Go 使用編譯器來編譯代碼。編譯器將源代碼編譯成二進(jìn)制(或字節(jié)碼)格式;在編譯代碼時(shí),編譯器檢查錯(cuò)誤、優(yōu)化性能并輸出可在不同平臺(tái)上運(yùn)行的二進(jìn)制文件。要?jiǎng)?chuàng)建并運(yùn)行 Go 程序,程序員必須執(zhí)行如下步驟。
- 使用文本編輯器創(chuàng)建 Go 程序;
- 保存文件;
- 編譯程序;
- 運(yùn)行編譯得到的可執(zhí)行文件。
這不同于 Python、Ruby 和 JavaScript 等語言,它們不包含編譯步驟。Go 自帶了編譯器,因此無須單獨(dú)安裝編譯器
為什么要學(xué)習(xí)Go語言
如果你要?jiǎng)?chuàng)建系統(tǒng)程序,或者基于網(wǎng)絡(luò)的程序,Go語言是很不錯(cuò)的選擇。作為一種相對(duì)較新的語言,它是由經(jīng)驗(yàn)豐富且受人尊敬的計(jì)算機(jī)科學(xué)家設(shè)計(jì)的,旨在應(yīng)對(duì)創(chuàng)建大型并發(fā)網(wǎng)絡(luò)程序面臨的挑戰(zhàn)。
在Go語言出現(xiàn)之前,開發(fā)者們總是面臨非常艱難的抉擇,究竟是使用執(zhí)行速度快但是編譯速度并不理想的語言(如:C++),還是使用編譯速度較快但執(zhí)行效率不佳的語言(如:.NET、Java),或者說開發(fā)難度較低但執(zhí)行速度一般的動(dòng)態(tài)語言呢?顯然,Go語言在這 3 個(gè)條件之間做到了最佳的平衡:快速編譯,高效執(zhí)行,易于開發(fā)。
Go語言支持交叉編譯,比如說你可以在運(yùn)行 Linux 系統(tǒng)的計(jì)算機(jī)上開發(fā)可以在 Windows 上運(yùn)行的應(yīng)用程序。這是第一門完全支持 UTF-8
的編程語言,這不僅體現(xiàn)在它可以處理使用 UTF-8 編碼的字符串,就連它的源碼文件格式都是使用的 UTF-8
編碼。Go語言做到了真正的國際化!