C/C++的人轉Go都說很爽,Java轉Go的人,覺得有時候寫的很彆扭,為啥?

忠實的Gopher妹子


先說說go語言的來源,算是編程語言裡面的富二代了,創始團隊本身就是精通多種編程語言的大神,而且背靠著谷歌公司這座大廟,go語言的相比主流的幾種編程語言都有明顯的特點,go語言最大的特點是簡潔明瞭,主要還是為了取代C++語言的繁瑣,主創團隊主要三個人,Rob ike 貝爾實驗室Unix開發團隊人員,Plan9操作系統主要領導人;ken tomption:圖靈獎得主,C語言前身B語言的作者,Unix的發明之人,操作系統Plan 9的作者,共同開發了UTF-8;Robert 為谷歌的V8引擎開發代碼,這些編程領域中頂級的高手了,開發一種新的編程語言主要從項目實戰出發。

先看看go語言主要能用來做什麼的,go語言主要用在中央服務器上處理多核問題,存儲集群等等應用方式,對於開發高性能的併發處理有著極大的好處,對於開發遊戲服務器是一種極大的好處,都有哪些公司在使用go語言,Google,Facebook國內的阿里巴巴,百度,京東都在部署這方面的研發人員,畢竟還屬於剛發展階段,還在為生態鏈建設而努力的一種編程語言。

go語言都有哪些特性讓這麼多的程序員著迷?性能上就有著非常獨特的優勢,這點主要針是現在的python和java語言中間還需要做解釋轉化用的,對於接近C語言執行效率的編程語言一般都會受到程序員的青睞,畢竟程序執行的效率一直貫穿整個程序的生涯,所以看到效率高的編程語言程序員都會有一種莫名的親切感;go語言集成了很多優秀的工具,像告訴的GC工具,對於傳統的GC有了極大的提升,本身在設計之處就是未來屏蔽很多的弊端,並且針對弊端集成開發了很多有用的工具包,開始的時候這些技術大牛隻是花費工作時間的百分20去做這件事,但時間長了谷歌公司發現這種編程語言的有點,就開始讓他們轉為全職開發這門編程語言。

go語言還有一個非常明顯的特點,語法簡潔,有點類似於C語言的開發,但是又有很多工具可以使用,能夠提升很多編程的效率,接近現在編程語言的發展趨勢,快讀的開發迭代,因為歷史淵源的問題,很多C/C++的編程人員看到這門編程語言,覺得用起來特別的清爽,因為這些大牛在設計之初就是為了破除C++語法的繁瑣,給大家開發一個效率高並且簡潔的開發語言,主要設計的方向是針對服務器端的開發,所以C++程序員覺得是一種為自己開發的編程語言,所以會覺得特別的清爽,畢竟同樣是在服務端開發換成這種編程語言能很快的解決問題何樂而不為的事情。

相比之下java開發者轉化成go語言就會覺得有點不適應,雖然同樣是服務端的開發,但看看go語言的締造者更加接近於底層的開發並且更加註重效率,難免和java的距離有點遠,通過java開發者可以看到go語言本身的很多不足之處,比如框架不夠豐富,類支持的種類不夠多,不支持函數式的編程等等,這也是go語言後續需要改進的地方,畢竟一個語言的生態鏈的建設需要一個一個很長的積累期。

現在的go語言只是在針對服務器端分佈式高併發上有一定的優點,對於很多地方還有不足之處,未來如何發展還是要看生態圈建設的程度了,但從技術角度上看如果能夠很好的解決服務端的高併發問題也算是一種不錯的小眾編程語言了,希望能幫到你。


大學生編程指南


Go 和 Java 都是 C 系語言,語法方面,存在很多相似的地方。Go 語言從 C 語言繼承了很多,同時也拋棄了不少,改進了不少。

Go 從 C 繼承了哪些重要特性,同時改進了哪些?

Go 跟 C 語言一樣,語法足夠簡單。一些基礎的語法,跟其他 C 系語言類似,從 C 繼承了下來。和其他很多 C 系語言不一樣的地方是,Go 繼承了 struct,而且,不像 C++/Java,還額外提供 class。所以 C 語言的人,寫 Go 會有很親切感。
更重要的是,Go 對於 C 語言做了很多改進,而且這些改進很多由於歷史原因導致的,作為一門全新的語言,沒有歷史包袱,完全可以在設計上做出改進。主要的改進有:
1. 跟 C 一樣有指針,但不允許進行指針運算,提升了安全性和易用性,很多 C 語言的開發者,對指針是有點頭疼的,但接觸 Go,會發現很容易使用指針;
2. 有垃圾回收機制,從繁瑣易錯的內存分配和釋放中解脫出來;
3. 在 struct(類型)的基礎上,引入方法的概念,相比 C 語言更利於結構化和管理;
4. 更高級的數據結構原始支持,比如動態數組(slice)、string、map 等;
5. 豐富的標準庫支持,比如 Go 對於網絡編程,標準庫有了很大的支持,寫起來會很簡單,相對來說 C 使用第三方庫,易用性也差一些;
6. 一定程度上支持面向對象編程;
7. 強大的工具鏈,編譯速度超級快;
8. import 機制改進;
9. 類型定義避免歧義,比如 `var p, q *int`;
10. 更強大的 IDE 支持;
11. 更強大、易用的併發支持;
...
以上種種,會讓 C 語言的開發者愛上 Go 語言。
對於 C++,因為其複雜性,我想面對 Go 這樣簡單、性能不錯、C 系的語言,應該沒有免疫力吧~

Java 為什麼有時候會覺得 Go 彆扭?

Java 雖然也是 C 系語言,但更多是面向對象的功能。很多設計模式的書,都是用 Java 語言來描述的。而 Go 語言,並非純面向對象,只是一定程度上,支持了部分面向對象的特性,不少面向對象的功能缺失,這會讓習慣 Java 的開發者感覺彆扭。
1. 沒有類型層次
2. 接口隱式實現
3. 沒有真正意義的繼承,因此也沒有基於類型繼承的多態
4. 沒有方法重載,而且還沒有泛型
5. 可見性問題
6. 沒有 Spring 這樣一統天下的框架
...
另外,Go 裡面的一些特性,Java 開發者可能也不太習慣,比如:有指針、類型足夠細分(比如各種 int)等。
我認為還有一個很重要的是,Go 相對於 Java,對計算機底層基礎的知識要求會更高,這會讓一些人感覺不適應。

但我還是要說一句,Java 開發者們,Go 還是值得你學習的。這裡附上之前回復的一個問答:《如何優雅得向Java程序員介紹go語言?》

https://www.wukong.com/question/6681852965965267212/


總結


其實很多東西還是習慣問題,但有時候,我們需要嘗試打破習慣,用另外的視角看待這個世界。對於編程語言來說,我們在使用一門語言時,要慢慢學會用該語言的方式來思考、解決問題,雖然這個過程可能是比較痛苦,但這是鍛鍊自己思維、提升自己很好地方式。


Go語言中文網


關於這個技術性問題,針對樓主問題可以簡單的回答。如果複雜的舉例一一說明就比較繁雜。

我先舉個例子:

有兩個人,一個叫小明,一個叫小紅。他們平日上班時,小明騎自行車,小紅開私家車。有一天公司提供班車供他們上班。這個時候小明就覺得很方便很好用。小紅就會覺得坐班車還是不如私家車舒服方便(僅僅舉個例子,不考慮綠色出行,不用自己駕駛的情況)。

這個時候你會發現,換了同樣的交通工具,但是得到的卻是兩個不同的體驗。就是因為他們起點和習慣不同。

把這個例子搬到技術上是一個道理。都知道C語言是面向過程的,Java是面相對象,裡面包含很多無法,關鍵字,算法,代碼結構語塊。使用GO語言對C語言的同學來說從語法和和開發思想上都有一定提升,所以用起來的感覺比較好。而對JAVA語言的同學來說提升的可能不是很多,並且給自己帶來了很大的學習成本和編程習慣的改變。所以同為GO語言,但對C語言和JAVA語言的同學會各有不同的編程體驗。

😊😊


科學教育雲平臺


就一群沙雕事兒事兒的…正經程序員不咋挑語言,有偏愛,但是不踩其他語言。就這幫沙雕引戰、無腦鼓吹,瘋狂踩其他語言。為啥java程序員事兒多,跟java沒關係,是用這個語言的程序員多,新手多。大學畢業就能java開發,正好年少輕狂。其實沒啥,改改習慣就好。要說rust感覺麻煩還行,畢竟所有權就是難搞。其他的,呵呵了…


現在也不快


一天看完go入門語法,己轉go半年,新項目也進入內測。從c++轉erlang再轉golang,真是越來越輕鬆,感覺生命無限拉長了好多。本來erlang就很舒服了,go的輪子更多用起來更方便。


粒子214836194


專Java,偶爾Go,但是Go真的很爽,主要是習慣問題,Go語法與Java差別大,多寫寫就習慣了


蘭博基泰LP700


基本上可以把GO看成加了多線程框架的C,所以一天轉過去沒難度。


Benben167825543


學習了一天,最後發現go沒有類概念,果斷放棄了


碼農謝鋒


c++轉java也很爽,因為c++不夠爽。


阿飛13


說Java轉Go難受的肯定不是做Java原生開發的,一定是重度框架依賴症患者,同理C#轉Go還可以但是沒有泛型的支持讓開發起來會麻煩不少,不過基本還可以


分享到:


相關文章: