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