為什么大家都選擇go語言?
今天馬哥教育就給大家分享的文章是為什么大家都選擇用go語言?我覺得選擇用go語言的原因有很多,go語言用于服務(wù)器端開發(fā),適合很多程序員一起開發(fā)大型的軟件,并且在軟件的不斷增長過程中,他能讓程序員更容易的驚醒修改,想要go語言入門和學(xué)習(xí)go語言的小伙伴一定要看看了,希望對大家有幫助。
靜態(tài),go是一門靜態(tài)語言,有著強(qiáng)類型約束,所以我們不太可能出現(xiàn)在Python中變量在運(yùn)行時類型不匹配(譬如int + string)這樣的runtime error。 在編譯階段就能夠幫我們發(fā)現(xiàn)很多問題,不用等到運(yùn)行時。(當(dāng)然,這個靜態(tài)語言都能做到)
代碼規(guī)范,很多人都比較反感g(shù)o強(qiáng)制的編碼規(guī)范,譬如花括號的位置。但我覺得,就因?yàn)閺?qiáng)制約定,所以大家寫出來的go代碼樣子都差不多,不用費(fèi)心再去深究代碼樣式問題。而且我發(fā)現(xiàn),因?yàn)橐?guī)范統(tǒng)一,我很容易就能理解別人寫的代碼。
庫支持,go的庫非常豐富,而且能通過go get非常方便的獲取github,google code上面的第三方庫(質(zhì)量你自己得擔(dān)著了),再不行,用go自己造輪子也是很方便的,而且造的輪子通常都比較穩(wěn)定。
開發(fā)迅速,不得不說,當(dāng)你習(xí)慣用go開發(fā)之后,用go開發(fā)功能非常的快,相對于靜態(tài)語言c++,開發(fā)的效率快的沒話說,我覺得比Python都不差,而且質(zhì)量有保證。我們花了不到一個星期進(jìn)行推送服務(wù)核心功能開發(fā),到現(xiàn)在都沒怎么變動,穩(wěn)定運(yùn)行。
部署方便,因?yàn)槭庆o態(tài)的,只需要build成一個可運(yùn)行程序就可以了,部署的時候直接扔一個文件過去,不需要像Python那樣安裝太多的依賴庫。
GO特性:
gc
GO提供了gc,這對于c++的童鞋來說,極大的減少了在內(nèi)存上面犯錯的機(jī)會,只是go的gc這個效率還真的不好恭維,比起java來說,還有很大的提升空間。
所以有時候?qū)懘a,我們還得根據(jù)tuning來提升gc的效率,譬如采用內(nèi)存池的方式來管理大塊的slice分配,采用no copy的方式來進(jìn)行string,slice的互轉(zhuǎn)。
不過go1.3貌似gc性能有了很大的改善,這點(diǎn)讓我比較期待。
defer
go的defer其實(shí)是一個讓人又愛又恨的東西,對于防止資源泄露,defer可是一個很不錯的東西,但是濫用defer可是會讓你面臨很嚴(yán)重的內(nèi)存問題,尤其是像下面的代碼:
for {
defer func(){
//do somthing
}
}
別以為go會在調(diào)用完成defer之后就好好的進(jìn)行g(shù)c回收defer里面的東西,在我們進(jìn)行內(nèi)存profile的時候,發(fā)現(xiàn)大量的內(nèi)存占用都是defer引起的。所以使用起來需要特別謹(jǐn)慎。
但我覺得,這個go應(yīng)該會稍微改善,在go1.3里面,也有了對defer的優(yōu)化。
error
也許error是一個讓人爭議很大的東西,現(xiàn)代方式的exception那里去呢?但是我覺得error能夠非常明確的告訴使用者該函數(shù)會有錯誤返回,如果使用exception,除非文檔足夠詳細(xì),我還真不知道哪里就會蹦出一個異常了。
其實(shí)這篇文章我覺得已經(jīng)解釋的很好了,go程序的慣例是對外的API使用error,而內(nèi)部錯誤處理可以用defer,recover和panic來簡化流程。
其實(shí)這倒跟我一貫的編程準(zhǔn)則對應(yīng),在團(tuán)隊(duì)在用Python進(jìn)行開發(fā)的時候,我們都明確要求庫對外提供的API需要使用返回值來表示錯誤,而在內(nèi)部可以使用try,catch異常機(jī)制。
interface
go提供了interface來進(jìn)行抽象編程。何謂接口,最通常的例子就是鴨子的故事,“當(dāng)看到一只鳥走起來像鴨子、游泳起來像鴨子、叫起來也像鴨子,那么這只鳥就可以被稱為鴨子“。
在go里面,interface就是一堆方法的集合,如果某個對象實(shí)現(xiàn)了這些方法,那么該對象可以就算是該interface。使用interface,我們可以很方便的實(shí)現(xiàn)非侵入式編程,進(jìn)行模塊功能的替換。
對于長時間沉浸c++和Python的童鞋來說,一下子要用interface來解決抽象問題,可能會很不適應(yīng)。但當(dāng)習(xí)慣之后,你會發(fā)現(xiàn),其實(shí)interface非常的靈活方便。
基于哪些痛點(diǎn)設(shè)計(jì)出Go語言?
當(dāng)初他們?yōu)槭裁磿性O(shè)計(jì)一個新語言的沖動呢?讓我們一起來回顧一下這些歷史,也許很多人對他們當(dāng)年遇到的問題感同身受。
設(shè)計(jì)Go語言是為了解決當(dāng)時Google開發(fā)遇到的以下這些問題:
大量的C++代碼,同時又引入了Java和Python
成千上萬的工程師
數(shù)以萬計(jì)行的代碼
分布式的編譯系統(tǒng)
數(shù)百萬的服務(wù)器
其主要有以下幾個方面的痛點(diǎn):
編譯慢
失控的依賴
每個工程師只是用了一個語言里面的一部分
程序難以維護(hù)(可讀性差、文檔不清晰等)
更新的花費(fèi)越來越長
交叉編譯困難
以上就是小編今天給大家分享的go語言的知識,設(shè)計(jì)Go的目標(biāo)是為了消除各種緩慢和笨重、改進(jìn)各種低效和擴(kuò)展性。Go是由那些開發(fā)大型系統(tǒng)的人設(shè)計(jì)的,同時也是為了這些人服務(wù)的;它是為了解決工程上的問題,不是為了研究語言設(shè)計(jì);它還是為了讓我們的編程變得更舒適和方便!想要了解更多關(guān)于go語言的知識,可以關(guān)注馬哥教育的官網(wǎng),獲取更多的資訊!
聲明:文章來源于網(wǎng)絡(luò),侵刪!