有好幾次,當(dāng)我想起來(lái)的時(shí)候,總是會(huì)問(wèn)自己:我為什么要放棄Go語(yǔ)言?這個(gè)決定是正確的嗎?是明智和理性的嗎?其實(shí)我一直在認(rèn)真思考這個(gè)問(wèn)題。
十載建站經(jīng)驗(yàn), 做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)客戶的見(jiàn)證與正確選擇。創(chuàng)新互聯(lián)提供完善的營(yíng)銷(xiāo)型網(wǎng)頁(yè)建站明細(xì)報(bào)價(jià)表。后期開(kāi)發(fā)更加便捷高效,我們致力于追求更美、更快、更規(guī)范。
開(kāi)門(mén)見(jiàn)山地說(shuō),我當(dāng)初放棄Go語(yǔ)言(golang),就是因?yàn)閮蓚€(gè)“不爽”:第一,對(duì)Go語(yǔ)言本身不爽;第二,對(duì)Go語(yǔ)言社區(qū)里的某些人不爽。毫無(wú)疑問(wèn),這是非常主觀的結(jié)論。轉(zhuǎn)載
1.1 不允許左花括號(hào)另起一行
1.2 編譯器莫名其妙地給行尾加上分號(hào)
1.3 極度強(qiáng)調(diào)編譯速度,不惜放棄本應(yīng)提供的功能
1.4 錯(cuò)誤處理機(jī)制太原始
1.5 垃圾回收器(GC)不完善、有重大缺陷
1.6 禁止未使用變量和多余import
1.7 創(chuàng)建對(duì)象的方式太多令人糾結(jié)
1.8 對(duì)象沒(méi)有構(gòu)造函數(shù)和析構(gòu)函數(shù)
1.9 defer語(yǔ)句的語(yǔ)義設(shè)定不甚合理
1.10 許多語(yǔ)言內(nèi)置設(shè)施不支持用戶定義的類(lèi)型
1.11 沒(méi)有泛型支持,常見(jiàn)數(shù)據(jù)類(lèi)型接口丑陋
1.12 實(shí)現(xiàn)接口不需要明確聲明
1.13 省掉小括號(hào)卻省不掉花括號(hào)
1.14 編譯生成的可執(zhí)行文件尺寸非常大
1.15 不支持動(dòng)態(tài)加載類(lèi)庫(kù)
因?yàn)閮?nèi)存管理粗糙。經(jīng)??吹絝mt.xxx導(dǎo)致內(nèi)存占用太多,反射導(dǎo)致內(nèi)存占用太多的抱怨。
go語(yǔ)言適合寫(xiě)服務(wù)器組件,那種和業(yè)務(wù)數(shù)據(jù)無(wú)關(guān)的服務(wù)器。比如數(shù)據(jù)庫(kù)服務(wù)器、web服務(wù)器、日志搜索引擎等。如果用來(lái)寫(xiě)一個(gè)crm管理系統(tǒng),非常累,因?yàn)槿狈枚喔呒?jí)特性和龐大的第三方庫(kù),而且語(yǔ)法比較單一,總體感覺(jué)就跟寫(xiě)命令行差不多。
Go語(yǔ)言是谷歌2009發(fā)布的編程語(yǔ)言,這個(gè)語(yǔ)言發(fā)明的目的,就是為了在運(yùn)行速度接近C/C++語(yǔ)言的基礎(chǔ)上(注意是接近),降低開(kāi)發(fā)者的門(mén)檻,減少開(kāi)發(fā)難度。
Go語(yǔ)言,在功能上沒(méi)有超過(guò)C/C++,適用者為沒(méi)有C/C++經(jīng)驗(yàn)的開(kāi)發(fā)者,開(kāi)發(fā)出接近C效率的程序。對(duì)于已經(jīng)熟練掌握C/C++的開(kāi)發(fā)者來(lái)說(shuō),Go語(yǔ)言沒(méi)有優(yōu)勢(shì),還要重學(xué)語(yǔ)法,適應(yīng)開(kāi)發(fā)環(huán)境,明顯是不符合效率的。
總結(jié)
其實(shí)語(yǔ)言這東西,都有其優(yōu)勢(shì)和劣勢(shì)。而且有些東西并不是純技術(shù)的。比如java的優(yōu)勢(shì)在于清晰的語(yǔ)意表達(dá)。寫(xiě)代碼的上限不高,但是下限也不低,適合工業(yè)開(kāi)發(fā)。
而go呢,不得不說(shuō)go在微服務(wù)這塊有先天優(yōu)勢(shì)。畢竟java中要實(shí)現(xiàn)go的很多功能,需要引入第三方庫(kù)。很笨重。而go原生支持,這個(gè)微服務(wù)就很輕巧。但是go的語(yǔ)法太活,工業(yè)用是一個(gè)挺大的弊端。
1:go與c語(yǔ)言相比,go有垃圾回收,不會(huì)造成內(nèi)存泄露問(wèn)題,go的語(yǔ)法簡(jiǎn)潔優(yōu)美,同樣的c++100行代碼go大概50行可以做到,go的目標(biāo)是能做C++能做的事,雖然目前可能不太實(shí)際
2:go的并行機(jī)制并不是一般的線程,通過(guò)channel和goroutine來(lái)實(shí)現(xiàn),比線程還要輕量級(jí)很多,所以go適合高并發(fā)的服務(wù)器端
3:go是系統(tǒng)級(jí)別的語(yǔ)言,相當(dāng)于c語(yǔ)言,java c#都是算比較高級(jí)的語(yǔ)言,這個(gè)不太好比,效率的話目前確實(shí)是要高一些,而且不需要外部依賴,所以go還是很強(qiáng)大的