Go 語(yǔ)言簡(jiǎn)介
學(xué)習(xí)任何知識(shí)之前肯定要對(duì)這個(gè)知識(shí)有一個(gè)簡(jiǎn)單的了解,當(dāng)然學(xué)習(xí) Go 語(yǔ)言也一樣,這個(gè)小節(jié)我們就來(lái)簡(jiǎn)單認(rèn)識(shí)下 Go 語(yǔ)言,了解下 Go 語(yǔ)言的來(lái)龍去脈。
1. Go 語(yǔ)言的出身
Go(又稱(chēng) golang)是 Google 開(kāi)發(fā)的一種靜態(tài)強(qiáng)類(lèi)型、編譯型、并發(fā)型,并具有垃圾回收功能的編程語(yǔ)言。
羅伯特·格里澤默(Robert Griesemer),羅布·派克(Rob Pike)及肯·湯普遜(Ken Thompson)于 2007 年 9 月開(kāi)始設(shè)計(jì) Go,后來(lái) Ian Lance Taylor、Russ Cox 加入項(xiàng)目。Go 是基于 Inferno 操作系統(tǒng)所開(kāi)發(fā)的,于 2009 年 11 月正式宣布推出,成為開(kāi)放源代碼項(xiàng)目,并在 Linux 及 Mac OS X 平臺(tái)上進(jìn)行了實(shí)現(xiàn),后來(lái)追加了 Windows 系統(tǒng)下的實(shí)現(xiàn)。在 2016 年,Go 被軟件評(píng)價(jià)公司 TIOBE 選為“TIOBE 2016 年最佳語(yǔ)言”。 目前,Go 已經(jīng)開(kāi)始每半年發(fā)布一個(gè)二級(jí)版本(即從 a.x 升級(jí)到 a.y)。
2. Go 語(yǔ)言的特點(diǎn)
- Go 語(yǔ)言可以直接編譯成主流操作系統(tǒng)支持的可執(zhí)行文件,部署服務(wù)只需要扔一個(gè)可執(zhí)行文件上去直接運(yùn)行就好了;
- Go 語(yǔ)言有不輸于動(dòng)態(tài)語(yǔ)言的豐富靜態(tài)庫(kù)。歸功于強(qiáng)大的官方團(tuán)隊(duì)和社區(qū),目前 Go 語(yǔ)言幾乎什么都可以開(kāi)發(fā);
- Go 語(yǔ)言天生支持并發(fā),這是個(gè)近乎無(wú)敵的設(shè)定;
- Go 語(yǔ)言具有自動(dòng)垃圾回收機(jī)制;
- Go 語(yǔ)言簡(jiǎn)單易學(xué),因?yàn)樗鼛缀踔С殖S玫恼Z(yǔ)言的所有特性:繼承、封裝等等;
- Go 語(yǔ)言內(nèi)嵌支持 C 語(yǔ)言,你甚至可以直接在 Go 語(yǔ)言里面寫(xiě) C 語(yǔ)言代碼;
- Go 語(yǔ)言支持交叉編譯,你可以在 Windows 環(huán)境中編譯任何平臺(tái)的 Go 可執(zhí)行程序。但是需要注意的是,如果你在 Go 程序中寫(xiě)了 C 語(yǔ)言,你就不能只用交叉編譯的特性了,所謂魚(yú)和熊掌不可兼得嘛。
3. Go 語(yǔ)言的使用場(chǎng)景
- 服務(wù)器編程;
- 分布式系統(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 開(kāi)發(fā)的 groupcache,couchbase 的部分組件;
- 云平臺(tái),目前國(guó)外很多云平臺(tái)在采用 Go 開(kāi)發(fā),CloudFoundy 的部分組件,前 VMare 的技術(shù)總監(jiān)自己出來(lái)搞的apcera 云平臺(tái);
- 區(qū)塊鏈技術(shù)研發(fā)。
4. Go 語(yǔ)言開(kāi)發(fā)的經(jīng)典項(xiàng)目
- Docker:基于 lxc 的一個(gè)虛擬打包工具,能夠?qū)崿F(xiàn) PAAS 平臺(tái)的組建。
- Hyperledger fabric:市面上最流行的兩大區(qū)塊鏈平臺(tái)之一。
5. 與其他開(kāi)發(fā)語(yǔ)言對(duì)比
Go 語(yǔ)言為什么能在現(xiàn)有的成熟語(yǔ)言中脫穎而出呢?這要?dú)w功于它比 Java 還簡(jiǎn)潔的語(yǔ)法,接近 C 語(yǔ)言的編譯執(zhí)行速度,甚至還有不亞于腳本語(yǔ)言的開(kāi)發(fā)速度。在目前最要求效率的當(dāng)下,它無(wú)疑會(huì)是一匹黑馬。但是和其它語(yǔ)言比起來(lái)劣勢(shì)也很明顯,因?yàn)樗霈F(xiàn)的時(shí)間短,學(xué)習(xí)資料少,第三方支持庫(kù)雖然多,但是比起 Java 以及 C 語(yǔ)言還是遠(yuǎn)遠(yuǎn)不夠。Go 語(yǔ)言不支持泛型,對(duì)于學(xué)習(xí) Java 的開(kāi)發(fā)人員來(lái)說(shuō)一開(kāi)始會(huì)很不適應(yīng)。
6. 為什么要學(xué)習(xí) Go 語(yǔ)言
綜上所述, Go 語(yǔ)言出身名門(mén),血統(tǒng)純正。從學(xué)習(xí)難度上來(lái)說(shuō)語(yǔ)法簡(jiǎn)單,功能強(qiáng)大。從可擴(kuò)展性上來(lái)說(shuō)第三方庫(kù)眾多,標(biāo)準(zhǔn)庫(kù)強(qiáng)大穩(wěn)定。性能上更是擁有無(wú)可挑剔的自動(dòng)調(diào)度線程。Go 語(yǔ)言完美地協(xié)調(diào)了運(yùn)行效率和開(kāi)發(fā)效率之間的關(guān)系。而且 Go 語(yǔ)言目前已經(jīng)廣泛應(yīng)用于虛擬容器、區(qū)塊鏈等傳統(tǒng)的和高精尖的產(chǎn)業(yè)中,將來(lái)會(huì)有巨大的前景。不管是國(guó)內(nèi)還是國(guó)外,對(duì) Go 語(yǔ)言的程序員的需求只會(huì)越來(lái)越多。
7. Go 語(yǔ)言的代碼
接下來(lái)我們來(lái)看看 Go 語(yǔ)言怎么用代碼來(lái)和你 say hello。
package main
import "fmt"
func main() {
fmt.Println("Hello Codey !")
}
上述代碼的輸出結(jié)果就是:Hello Codey !
8. 小結(jié)
Go 語(yǔ)言目前的用途主要是在服務(wù)器和區(qū)塊鏈上。但是它的功能不止于此,需要我們多去開(kāi)發(fā)多去使用,使得 Go 語(yǔ)言的生態(tài)更加完整,更加強(qiáng)大。