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

4 個回答
Go语言中文网
2019-06-06

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

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

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 系的語言,應該沒有免疫力吧~C/C++的人轉Go都說很爽,Java轉Go的人,覺得有時候寫的很彆扭,為啥?

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/


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

總結


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

科学教育云平台
2019-06-06

謝邀

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

我先舉個例子:

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

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

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

😊😊

蓝鸟啃苹果
2019-06-07

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

阿飛十三
2019-06-07

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

相關推薦

推薦中...