? ? ? ?之前一直用Node.js作為開發(fā)語言,用了差不多4年的Node.js,涉及前端和后端,最近看到Golang這個新興之秀挺火的,于是想探究探究一下這門語言,對比了一下他們的Github repo,截止現(xiàn)在Node.js的repo有72.5K星, issue數(shù)量是859個,Golang的repo有75.7K星,issue數(shù)量是5K+個。從趨勢來看,Golang來勢洶洶,但是問題較多,需要一段時間才能更加穩(wěn)定。到官網(wǎng)看了一下Golang的簡單使用方法,毫無疑問,都是從hello world開始的,編寫了一個go文件之后,使用go build命令可以直接打包成二進(jìn)制的文件,然后直接執(zhí)行這個二進(jìn)制文件即可運行該程序,使用起來確實是方便??磥沓绦蛘Z言都是朝著這個方向在前進(jìn)的,盡量構(gòu)建的時候打包成二進(jìn)制文件,讓機(jī)器直接來執(zhí)行,比如最近比較火的WebAssembly也是采用的這種形式,先將代碼轉(zhuǎn)化為接近于二進(jìn)制的文件,然后再執(zhí)行。而Node.js采用的是解釋器的方式進(jìn)行代碼運行的,也就是運行到哪里,哪里再開始做一些編譯的動作,這種解釋器的方法有一個優(yōu)勢,運行起來很快,但是同樣會有缺點,也就是程序一開始并不知道哪里會有編譯的錯誤,要運行到錯誤的那一行才會發(fā)現(xiàn),另外就是一些代碼的重復(fù)執(zhí)行編譯,比如for循環(huán),里面的語句是需要循環(huán)一次編譯運行一次的;golang的提前編譯就就解決了運行時才發(fā)現(xiàn)錯誤的這個劣勢,還有重復(fù)編譯執(zhí)行某些語句的問題,另外就是golang可以在構(gòu)建的階段將文件直接轉(zhuǎn)化為二進(jìn)制文件,運行起來更加高效。
? ? ? ?通過運行g(shù)o官網(wǎng)提供的一些例子,我發(fā)現(xiàn)它和C語言的風(fēng)格很類似,一開始來個package ,然后import導(dǎo)入包,main函數(shù)為入口函數(shù),很多東西相比C語言,簡化并優(yōu)秀了很多,比如函數(shù)的聲明、自動支持Unicode字符集、提供了100多個標(biāo)準(zhǔn)包來執(zhí)行基本的輸入輸出還有文本處理等常規(guī)任務(wù),所以有些人會把Go成為類C語言或者21世紀(jì)的C語言。它確實是吸取了C語言的一些特性,比如表達(dá)式語法、控制流語句、基本數(shù)據(jù)類型,同時它也吸收了Pascal的優(yōu)秀特點,比如包導(dǎo)入、聲明的語法,還有就是收到CSP語言的啟發(fā),在CSP中,程序就是一組無共享狀態(tài)進(jìn)程的并行組合,進(jìn)程間的通信和同步采用通道完成。

? ? ? ?Go的發(fā)明者Rob Pike來自于Google,Google的軟件項目用戶量多,業(yè)務(wù)復(fù)雜,為了修復(fù)某個問題,一點點將系統(tǒng)的某個部分變得更加復(fù)雜,在當(dāng)今敏捷開發(fā)的模式下,簡單性往往被忽略,Rob Pike意識到了這一點,發(fā)明了Go語言。由于在設(shè)計這門語言的時候考慮了大量的錯誤檢測,于是它可以避免開發(fā)者犯下的絕大部分錯誤,同時它也是相比其他語言相對簡單的語言。由于沒有接觸過太多Go的東西,只是通過閱讀官網(wǎng)、文檔還有一些前輩的經(jīng)驗,所以上面講到的一些內(nèi)容比較膚淺,下一節(jié)我開始從程序的結(jié)構(gòu)出發(fā),講解一下Go的一些使用方法和特性,來幫助更多入門Go的開發(fā)者。
參考文獻(xiàn):
1.?幾張圖讓你看懂WebAssembly:http://m.itdecent.cn/p/bff8aa23fe4d
2. golang官網(wǎng):https://golang.org/