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