'Go語言和Java、python等其他語言的對比分析'

"
作者:qfliweimin 
鏈接:https://www.jianshu.com/p/a075147dba4d

設計Go是為了解決當時Google開發遇到的問題

大量的C++代碼,同時又引入了Java和Python

成千上萬的工程師

數以萬計行的代碼

分佈式的編譯系統

數百萬的服務器

Google開發中的痛點

編譯慢

失控的依賴

每個工程師只是用了一個語言裡面的一部分

程序難以維護(可讀性差、文檔不清晰等)

更新的花費越來越長

交叉編譯困難

如何解決當前的問題和痛點?

Go希望成為互聯網時代的C語言。多數系統級語言(包括Java和C#)的根本編程哲學來源於C++,將C++的面向對象進一步發揚光大。但是Go語言的設計者卻有不同的看法,他們認為值得學習的是C語言。C語言經久不衰的根源是它足夠簡單。因此,Go語言也是足夠簡單。

所以,他們當時設計Go的目標是為了消除各種緩慢和笨重、改進各種低效和擴展性。Go是由那些開發大型系統的人設計的,同時也是為了這些人服務的;它是為了解決工程上的問題,不是為了研究語言設計;它還是為了讓我們的編程變得更舒適和方便。

但是結合Google當時內部的一些現實情況,如很多工程師都是C系的,所以新設計的語言一定要易學習,最好是類似C的語言;20年沒有出新的語言了,所以新設計的語言必須是現代化的(例如內置GC)等情況。最後根據實戰經驗,他們向著目標設計了Go這個語言。

Go語言的特色

沒有繼承多態的面向對象

強一致類型

interface不需要顯式聲明(Duck Typing)

沒有異常處理(Error is value)

基於首字母的可訪問特性

不用的import或者變量引起編譯錯誤

完整而卓越的標準庫包

Go內置runtime(作用是性能監控、垃圾回收等)

二、Go語言的優勢

1、學習曲線容易

Go語言語法簡單,包含了類C語法。因為Go語言容易學習,所以一個普通的大學生花幾個星期就能寫出來可以上手的、高性能的應用。在國內大家都追求快,這也是為什麼國內Go流行的原因之一。

"
作者:qfliweimin 
鏈接:https://www.jianshu.com/p/a075147dba4d

設計Go是為了解決當時Google開發遇到的問題

大量的C++代碼,同時又引入了Java和Python

成千上萬的工程師

數以萬計行的代碼

分佈式的編譯系統

數百萬的服務器

Google開發中的痛點

編譯慢

失控的依賴

每個工程師只是用了一個語言裡面的一部分

程序難以維護(可讀性差、文檔不清晰等)

更新的花費越來越長

交叉編譯困難

如何解決當前的問題和痛點?

Go希望成為互聯網時代的C語言。多數系統級語言(包括Java和C#)的根本編程哲學來源於C++,將C++的面向對象進一步發揚光大。但是Go語言的設計者卻有不同的看法,他們認為值得學習的是C語言。C語言經久不衰的根源是它足夠簡單。因此,Go語言也是足夠簡單。

所以,他們當時設計Go的目標是為了消除各種緩慢和笨重、改進各種低效和擴展性。Go是由那些開發大型系統的人設計的,同時也是為了這些人服務的;它是為了解決工程上的問題,不是為了研究語言設計;它還是為了讓我們的編程變得更舒適和方便。

但是結合Google當時內部的一些現實情況,如很多工程師都是C系的,所以新設計的語言一定要易學習,最好是類似C的語言;20年沒有出新的語言了,所以新設計的語言必須是現代化的(例如內置GC)等情況。最後根據實戰經驗,他們向著目標設計了Go這個語言。

Go語言的特色

沒有繼承多態的面向對象

強一致類型

interface不需要顯式聲明(Duck Typing)

沒有異常處理(Error is value)

基於首字母的可訪問特性

不用的import或者變量引起編譯錯誤

完整而卓越的標準庫包

Go內置runtime(作用是性能監控、垃圾回收等)

二、Go語言的優勢

1、學習曲線容易

Go語言語法簡單,包含了類C語法。因為Go語言容易學習,所以一個普通的大學生花幾個星期就能寫出來可以上手的、高性能的應用。在國內大家都追求快,這也是為什麼國內Go流行的原因之一。

Go語言和Java、python等其他語言的對比分析

Go 語言的語法特性簡直是太簡單了,簡單到你幾乎玩不出什麼花招,直來直去的,學習曲線很低,上手非常快。

2、效率:快速的編譯時間,開發效率和運行效率高

開發過程中相較於 Java 和 C++呆滯的編譯速度,Go 的快速編譯時間是一個主要的效率優勢。Go擁有接近C的運行效率和接近PHP的開發效率。

"
作者:qfliweimin 
鏈接:https://www.jianshu.com/p/a075147dba4d

設計Go是為了解決當時Google開發遇到的問題

大量的C++代碼,同時又引入了Java和Python

成千上萬的工程師

數以萬計行的代碼

分佈式的編譯系統

數百萬的服務器

Google開發中的痛點

編譯慢

失控的依賴

每個工程師只是用了一個語言裡面的一部分

程序難以維護(可讀性差、文檔不清晰等)

更新的花費越來越長

交叉編譯困難

如何解決當前的問題和痛點?

Go希望成為互聯網時代的C語言。多數系統級語言(包括Java和C#)的根本編程哲學來源於C++,將C++的面向對象進一步發揚光大。但是Go語言的設計者卻有不同的看法,他們認為值得學習的是C語言。C語言經久不衰的根源是它足夠簡單。因此,Go語言也是足夠簡單。

所以,他們當時設計Go的目標是為了消除各種緩慢和笨重、改進各種低效和擴展性。Go是由那些開發大型系統的人設計的,同時也是為了這些人服務的;它是為了解決工程上的問題,不是為了研究語言設計;它還是為了讓我們的編程變得更舒適和方便。

但是結合Google當時內部的一些現實情況,如很多工程師都是C系的,所以新設計的語言一定要易學習,最好是類似C的語言;20年沒有出新的語言了,所以新設計的語言必須是現代化的(例如內置GC)等情況。最後根據實戰經驗,他們向著目標設計了Go這個語言。

Go語言的特色

沒有繼承多態的面向對象

強一致類型

interface不需要顯式聲明(Duck Typing)

沒有異常處理(Error is value)

基於首字母的可訪問特性

不用的import或者變量引起編譯錯誤

完整而卓越的標準庫包

Go內置runtime(作用是性能監控、垃圾回收等)

二、Go語言的優勢

1、學習曲線容易

Go語言語法簡單,包含了類C語法。因為Go語言容易學習,所以一個普通的大學生花幾個星期就能寫出來可以上手的、高性能的應用。在國內大家都追求快,這也是為什麼國內Go流行的原因之一。

Go語言和Java、python等其他語言的對比分析

Go 語言的語法特性簡直是太簡單了,簡單到你幾乎玩不出什麼花招,直來直去的,學習曲線很低,上手非常快。

2、效率:快速的編譯時間,開發效率和運行效率高

開發過程中相較於 Java 和 C++呆滯的編譯速度,Go 的快速編譯時間是一個主要的效率優勢。Go擁有接近C的運行效率和接近PHP的開發效率。

Go語言和Java、python等其他語言的對比分析

C 語言的理念是信任程序員,保持語言的小巧,不屏蔽底層且底層友好,關注語言的執行效率和性能。而 Python 的姿態是用盡量少的代碼完成儘量多的事。於是我能夠感覺到,Go 語言想要把 C 和 Python 統一起來,這是多棒的一件事啊。

"
作者:qfliweimin 
鏈接:https://www.jianshu.com/p/a075147dba4d

設計Go是為了解決當時Google開發遇到的問題

大量的C++代碼,同時又引入了Java和Python

成千上萬的工程師

數以萬計行的代碼

分佈式的編譯系統

數百萬的服務器

Google開發中的痛點

編譯慢

失控的依賴

每個工程師只是用了一個語言裡面的一部分

程序難以維護(可讀性差、文檔不清晰等)

更新的花費越來越長

交叉編譯困難

如何解決當前的問題和痛點?

Go希望成為互聯網時代的C語言。多數系統級語言(包括Java和C#)的根本編程哲學來源於C++,將C++的面向對象進一步發揚光大。但是Go語言的設計者卻有不同的看法,他們認為值得學習的是C語言。C語言經久不衰的根源是它足夠簡單。因此,Go語言也是足夠簡單。

所以,他們當時設計Go的目標是為了消除各種緩慢和笨重、改進各種低效和擴展性。Go是由那些開發大型系統的人設計的,同時也是為了這些人服務的;它是為了解決工程上的問題,不是為了研究語言設計;它還是為了讓我們的編程變得更舒適和方便。

但是結合Google當時內部的一些現實情況,如很多工程師都是C系的,所以新設計的語言一定要易學習,最好是類似C的語言;20年沒有出新的語言了,所以新設計的語言必須是現代化的(例如內置GC)等情況。最後根據實戰經驗,他們向著目標設計了Go這個語言。

Go語言的特色

沒有繼承多態的面向對象

強一致類型

interface不需要顯式聲明(Duck Typing)

沒有異常處理(Error is value)

基於首字母的可訪問特性

不用的import或者變量引起編譯錯誤

完整而卓越的標準庫包

Go內置runtime(作用是性能監控、垃圾回收等)

二、Go語言的優勢

1、學習曲線容易

Go語言語法簡單,包含了類C語法。因為Go語言容易學習,所以一個普通的大學生花幾個星期就能寫出來可以上手的、高性能的應用。在國內大家都追求快,這也是為什麼國內Go流行的原因之一。

Go語言和Java、python等其他語言的對比分析

Go 語言的語法特性簡直是太簡單了,簡單到你幾乎玩不出什麼花招,直來直去的,學習曲線很低,上手非常快。

2、效率:快速的編譯時間,開發效率和運行效率高

開發過程中相較於 Java 和 C++呆滯的編譯速度,Go 的快速編譯時間是一個主要的效率優勢。Go擁有接近C的運行效率和接近PHP的開發效率。

Go語言和Java、python等其他語言的對比分析

C 語言的理念是信任程序員,保持語言的小巧,不屏蔽底層且底層友好,關注語言的執行效率和性能。而 Python 的姿態是用盡量少的代碼完成儘量多的事。於是我能夠感覺到,Go 語言想要把 C 和 Python 統一起來,這是多棒的一件事啊。

Go語言和Java、python等其他語言的對比分析

3、出身名門、血統純正

之所以說Go出身名門,從Go語言的創造者就可見端倪,Go語言絕對血統純正。其次Go語言出自Google公司,Google在業界的知名度和實力自然不用多說。Google公司聚集了一批牛人,在各種編程語言稱雄爭霸的局面下推出新的編程語言,自然有它的戰略考慮。而且從Go語言的發展態勢來看,Google對它這個新的寵兒還是很看重的,Go自然有一個良好的發展前途。

Google 親兒子--->Golang(夠浪) ,出身名門,血統純正

4、自由高效:組合的思想、無侵入式的接口

Go語言可以說是開發效率和運行效率二者的完美融合,天生的併發編程支持。Go語言支持當前所有的編程範式,包括過程式編程、面向對象編程、面向接口編程、函數式編程。程序員們可以各取所需、自由組合、想怎麼玩就怎麼玩。

5、強大的標準庫

這包括互聯網應用、系統編程和網絡編程。Go裡面的標準庫基本上已經是非常穩定了,特別是我這裡提到的三個,網絡層、系統層的庫非常實用。Go 語言的 lib 庫麻雀雖小五臟俱全。Go 語言的 lib 庫中基本上有絕大多數常用的庫,雖然有些庫還不是很好,但我覺得不是問題,因為我相信在未來的發展中會把這些問題解決掉。

6、部署方便:二進制文件,Copy部署

這一點是很多人選擇Go的最大理由,因為部署太方便了,所以現在也有很多人用Go開發運維程序。

7、簡單的併發

並行和異步編程幾乎無痛點。Go 語言的 Goroutine 和 Channel 這兩個神器簡直就是併發和異步編程的巨大福音。像 C、C++、Java、Python 和 JavaScript 這些語言的併發和異步方式太控制就比較複雜了,而且容易出錯,而 Go 解決這個問題非常地優雅和流暢。這對於編程多年受盡併發和異步折磨的編程者來說,完全就是讓人眼前一亮的感覺。Go 是一種非常高效的語言,高度支持併發性。Go是為大數據、微服務、併發而生的一種編程語言。

Go 作為一門語言致力於使事情簡單化。它並未引入很多新概念,而是聚焦於打造一門簡單的語言,它使用起來異常快速並且簡單。其唯一的創新之處是 goroutines 和通道。Goroutines 是 Go 面向線程的輕量級方法,而通道是 goroutines 之間通信的優先方式。

創建 Goroutines 的成本很低,只需幾千個字節的額外內存,正由於此,才使得同時運行數百個甚至數千個 goroutines 成為可能。可以藉助通道實現 goroutines 之間的通信。Goroutines 以及基於通道的併發性方法使其非常容易使用所有可用的 CPU 內核,並處理併發的 IO。相較於 Python/Java,在一個 goroutine 上運行一個函數需要最小的代碼。

"
作者:qfliweimin 
鏈接:https://www.jianshu.com/p/a075147dba4d

設計Go是為了解決當時Google開發遇到的問題

大量的C++代碼,同時又引入了Java和Python

成千上萬的工程師

數以萬計行的代碼

分佈式的編譯系統

數百萬的服務器

Google開發中的痛點

編譯慢

失控的依賴

每個工程師只是用了一個語言裡面的一部分

程序難以維護(可讀性差、文檔不清晰等)

更新的花費越來越長

交叉編譯困難

如何解決當前的問題和痛點?

Go希望成為互聯網時代的C語言。多數系統級語言(包括Java和C#)的根本編程哲學來源於C++,將C++的面向對象進一步發揚光大。但是Go語言的設計者卻有不同的看法,他們認為值得學習的是C語言。C語言經久不衰的根源是它足夠簡單。因此,Go語言也是足夠簡單。

所以,他們當時設計Go的目標是為了消除各種緩慢和笨重、改進各種低效和擴展性。Go是由那些開發大型系統的人設計的,同時也是為了這些人服務的;它是為了解決工程上的問題,不是為了研究語言設計;它還是為了讓我們的編程變得更舒適和方便。

但是結合Google當時內部的一些現實情況,如很多工程師都是C系的,所以新設計的語言一定要易學習,最好是類似C的語言;20年沒有出新的語言了,所以新設計的語言必須是現代化的(例如內置GC)等情況。最後根據實戰經驗,他們向著目標設計了Go這個語言。

Go語言的特色

沒有繼承多態的面向對象

強一致類型

interface不需要顯式聲明(Duck Typing)

沒有異常處理(Error is value)

基於首字母的可訪問特性

不用的import或者變量引起編譯錯誤

完整而卓越的標準庫包

Go內置runtime(作用是性能監控、垃圾回收等)

二、Go語言的優勢

1、學習曲線容易

Go語言語法簡單,包含了類C語法。因為Go語言容易學習,所以一個普通的大學生花幾個星期就能寫出來可以上手的、高性能的應用。在國內大家都追求快,這也是為什麼國內Go流行的原因之一。

Go語言和Java、python等其他語言的對比分析

Go 語言的語法特性簡直是太簡單了,簡單到你幾乎玩不出什麼花招,直來直去的,學習曲線很低,上手非常快。

2、效率:快速的編譯時間,開發效率和運行效率高

開發過程中相較於 Java 和 C++呆滯的編譯速度,Go 的快速編譯時間是一個主要的效率優勢。Go擁有接近C的運行效率和接近PHP的開發效率。

Go語言和Java、python等其他語言的對比分析

C 語言的理念是信任程序員,保持語言的小巧,不屏蔽底層且底層友好,關注語言的執行效率和性能。而 Python 的姿態是用盡量少的代碼完成儘量多的事。於是我能夠感覺到,Go 語言想要把 C 和 Python 統一起來,這是多棒的一件事啊。

Go語言和Java、python等其他語言的對比分析

3、出身名門、血統純正

之所以說Go出身名門,從Go語言的創造者就可見端倪,Go語言絕對血統純正。其次Go語言出自Google公司,Google在業界的知名度和實力自然不用多說。Google公司聚集了一批牛人,在各種編程語言稱雄爭霸的局面下推出新的編程語言,自然有它的戰略考慮。而且從Go語言的發展態勢來看,Google對它這個新的寵兒還是很看重的,Go自然有一個良好的發展前途。

Google 親兒子--->Golang(夠浪) ,出身名門,血統純正

4、自由高效:組合的思想、無侵入式的接口

Go語言可以說是開發效率和運行效率二者的完美融合,天生的併發編程支持。Go語言支持當前所有的編程範式,包括過程式編程、面向對象編程、面向接口編程、函數式編程。程序員們可以各取所需、自由組合、想怎麼玩就怎麼玩。

5、強大的標準庫

這包括互聯網應用、系統編程和網絡編程。Go裡面的標準庫基本上已經是非常穩定了,特別是我這裡提到的三個,網絡層、系統層的庫非常實用。Go 語言的 lib 庫麻雀雖小五臟俱全。Go 語言的 lib 庫中基本上有絕大多數常用的庫,雖然有些庫還不是很好,但我覺得不是問題,因為我相信在未來的發展中會把這些問題解決掉。

6、部署方便:二進制文件,Copy部署

這一點是很多人選擇Go的最大理由,因為部署太方便了,所以現在也有很多人用Go開發運維程序。

7、簡單的併發

並行和異步編程幾乎無痛點。Go 語言的 Goroutine 和 Channel 這兩個神器簡直就是併發和異步編程的巨大福音。像 C、C++、Java、Python 和 JavaScript 這些語言的併發和異步方式太控制就比較複雜了,而且容易出錯,而 Go 解決這個問題非常地優雅和流暢。這對於編程多年受盡併發和異步折磨的編程者來說,完全就是讓人眼前一亮的感覺。Go 是一種非常高效的語言,高度支持併發性。Go是為大數據、微服務、併發而生的一種編程語言。

Go 作為一門語言致力於使事情簡單化。它並未引入很多新概念,而是聚焦於打造一門簡單的語言,它使用起來異常快速並且簡單。其唯一的創新之處是 goroutines 和通道。Goroutines 是 Go 面向線程的輕量級方法,而通道是 goroutines 之間通信的優先方式。

創建 Goroutines 的成本很低,只需幾千個字節的額外內存,正由於此,才使得同時運行數百個甚至數千個 goroutines 成為可能。可以藉助通道實現 goroutines 之間的通信。Goroutines 以及基於通道的併發性方法使其非常容易使用所有可用的 CPU 內核,並處理併發的 IO。相較於 Python/Java,在一個 goroutine 上運行一個函數需要最小的代碼。

Go語言和Java、python等其他語言的對比分析

8、穩定性

Go擁有強大的編譯檢查、嚴格的編碼規範和完整的軟件生命週期工具,具有很強的穩定性,穩定壓倒一切。那麼為什麼Go相比於其他程序會更穩定呢?這是因為Go提供了軟件生命週期(開發、測試、部署、維護等等)的各個環節的工具,如go tool、gofmt、go test。

三、對比其他語言

Go的很多語言特性借鑑與它的三個祖先:C,Pascal和CSP。Go的語法、數據類型、控制流等繼承於C,Go的包、面對對象等思想來源於Pascal分支,而Go最大的語言特色,基於管道通信的協程併發模型,則借鑑於CSP分支。

"
作者:qfliweimin 
鏈接:https://www.jianshu.com/p/a075147dba4d

設計Go是為了解決當時Google開發遇到的問題

大量的C++代碼,同時又引入了Java和Python

成千上萬的工程師

數以萬計行的代碼

分佈式的編譯系統

數百萬的服務器

Google開發中的痛點

編譯慢

失控的依賴

每個工程師只是用了一個語言裡面的一部分

程序難以維護(可讀性差、文檔不清晰等)

更新的花費越來越長

交叉編譯困難

如何解決當前的問題和痛點?

Go希望成為互聯網時代的C語言。多數系統級語言(包括Java和C#)的根本編程哲學來源於C++,將C++的面向對象進一步發揚光大。但是Go語言的設計者卻有不同的看法,他們認為值得學習的是C語言。C語言經久不衰的根源是它足夠簡單。因此,Go語言也是足夠簡單。

所以,他們當時設計Go的目標是為了消除各種緩慢和笨重、改進各種低效和擴展性。Go是由那些開發大型系統的人設計的,同時也是為了這些人服務的;它是為了解決工程上的問題,不是為了研究語言設計;它還是為了讓我們的編程變得更舒適和方便。

但是結合Google當時內部的一些現實情況,如很多工程師都是C系的,所以新設計的語言一定要易學習,最好是類似C的語言;20年沒有出新的語言了,所以新設計的語言必須是現代化的(例如內置GC)等情況。最後根據實戰經驗,他們向著目標設計了Go這個語言。

Go語言的特色

沒有繼承多態的面向對象

強一致類型

interface不需要顯式聲明(Duck Typing)

沒有異常處理(Error is value)

基於首字母的可訪問特性

不用的import或者變量引起編譯錯誤

完整而卓越的標準庫包

Go內置runtime(作用是性能監控、垃圾回收等)

二、Go語言的優勢

1、學習曲線容易

Go語言語法簡單,包含了類C語法。因為Go語言容易學習,所以一個普通的大學生花幾個星期就能寫出來可以上手的、高性能的應用。在國內大家都追求快,這也是為什麼國內Go流行的原因之一。

Go語言和Java、python等其他語言的對比分析

Go 語言的語法特性簡直是太簡單了,簡單到你幾乎玩不出什麼花招,直來直去的,學習曲線很低,上手非常快。

2、效率:快速的編譯時間,開發效率和運行效率高

開發過程中相較於 Java 和 C++呆滯的編譯速度,Go 的快速編譯時間是一個主要的效率優勢。Go擁有接近C的運行效率和接近PHP的開發效率。

Go語言和Java、python等其他語言的對比分析

C 語言的理念是信任程序員,保持語言的小巧,不屏蔽底層且底層友好,關注語言的執行效率和性能。而 Python 的姿態是用盡量少的代碼完成儘量多的事。於是我能夠感覺到,Go 語言想要把 C 和 Python 統一起來,這是多棒的一件事啊。

Go語言和Java、python等其他語言的對比分析

3、出身名門、血統純正

之所以說Go出身名門,從Go語言的創造者就可見端倪,Go語言絕對血統純正。其次Go語言出自Google公司,Google在業界的知名度和實力自然不用多說。Google公司聚集了一批牛人,在各種編程語言稱雄爭霸的局面下推出新的編程語言,自然有它的戰略考慮。而且從Go語言的發展態勢來看,Google對它這個新的寵兒還是很看重的,Go自然有一個良好的發展前途。

Google 親兒子--->Golang(夠浪) ,出身名門,血統純正

4、自由高效:組合的思想、無侵入式的接口

Go語言可以說是開發效率和運行效率二者的完美融合,天生的併發編程支持。Go語言支持當前所有的編程範式,包括過程式編程、面向對象編程、面向接口編程、函數式編程。程序員們可以各取所需、自由組合、想怎麼玩就怎麼玩。

5、強大的標準庫

這包括互聯網應用、系統編程和網絡編程。Go裡面的標準庫基本上已經是非常穩定了,特別是我這裡提到的三個,網絡層、系統層的庫非常實用。Go 語言的 lib 庫麻雀雖小五臟俱全。Go 語言的 lib 庫中基本上有絕大多數常用的庫,雖然有些庫還不是很好,但我覺得不是問題,因為我相信在未來的發展中會把這些問題解決掉。

6、部署方便:二進制文件,Copy部署

這一點是很多人選擇Go的最大理由,因為部署太方便了,所以現在也有很多人用Go開發運維程序。

7、簡單的併發

並行和異步編程幾乎無痛點。Go 語言的 Goroutine 和 Channel 這兩個神器簡直就是併發和異步編程的巨大福音。像 C、C++、Java、Python 和 JavaScript 這些語言的併發和異步方式太控制就比較複雜了,而且容易出錯,而 Go 解決這個問題非常地優雅和流暢。這對於編程多年受盡併發和異步折磨的編程者來說,完全就是讓人眼前一亮的感覺。Go 是一種非常高效的語言,高度支持併發性。Go是為大數據、微服務、併發而生的一種編程語言。

Go 作為一門語言致力於使事情簡單化。它並未引入很多新概念,而是聚焦於打造一門簡單的語言,它使用起來異常快速並且簡單。其唯一的創新之處是 goroutines 和通道。Goroutines 是 Go 面向線程的輕量級方法,而通道是 goroutines 之間通信的優先方式。

創建 Goroutines 的成本很低,只需幾千個字節的額外內存,正由於此,才使得同時運行數百個甚至數千個 goroutines 成為可能。可以藉助通道實現 goroutines 之間的通信。Goroutines 以及基於通道的併發性方法使其非常容易使用所有可用的 CPU 內核,並處理併發的 IO。相較於 Python/Java,在一個 goroutine 上運行一個函數需要最小的代碼。

Go語言和Java、python等其他語言的對比分析

8、穩定性

Go擁有強大的編譯檢查、嚴格的編碼規範和完整的軟件生命週期工具,具有很強的穩定性,穩定壓倒一切。那麼為什麼Go相比於其他程序會更穩定呢?這是因為Go提供了軟件生命週期(開發、測試、部署、維護等等)的各個環節的工具,如go tool、gofmt、go test。

三、對比其他語言

Go的很多語言特性借鑑與它的三個祖先:C,Pascal和CSP。Go的語法、數據類型、控制流等繼承於C,Go的包、面對對象等思想來源於Pascal分支,而Go最大的語言特色,基於管道通信的協程併發模型,則借鑑於CSP分支。

Go語言和Java、python等其他語言的對比分析

Java

編譯語言,速度適中(2.67s),目前的大型網站都是拿java寫的,比如淘寶、京東等。主要特點是穩定,開源性好,具有自己的一套編寫規範,開發效率適中,目前最主流的語言。

作為編程語言中的大腕。具有最大的知名度和用戶群。無論風起雲湧,我自巍然不動。他強任他強,清風拂山崗;他橫由他橫,明月照大江。

c#

執行速度快(4.28),學習難度適中,開發速度適中。但是由於c#存在很多缺點,京東、攜程等大型網站前身都是用c#開發的,但是現在都遷移到了java上。

C/C++

現存編程語言中的老祖,其他語言皆由此而生。執行速度最快無人能及。但是寫起來最為複雜,開發難度大。

Javascript

編程語言中特立獨行的傲嬌美女。前端處理能力是其它語言無法比擬。發展中的js後端處理能力也是卓越不凡。前後端通吃,捨我其誰?

Python

腳本語言,速度最慢(258s),代碼簡潔、學習進度短,開發速度快。豆瓣就是拿python寫的。Python著名的服務器框架有django,flask。但是python在大型項目上不太穩定,因此有些用python的企業後來遷移到了java上。

scala

編譯語言,比python快十倍,和java差不多,但是學習進度慢,而且在實際編程中,如果對語言不夠精通,很容易造成性能嚴重下降。,後來比如Yammer就從scala遷移到了java上。微服務框架有lagom等。

Go

編程界的小鮮肉。高併發能力無人能及。即具有像Python一樣的簡潔代碼、開發速度,又具有C語言一樣的執行效率,優勢突出。

四、最後

因為Go的語法和Erlang、Python類似,所以我們將這三門語言做個詳細的對比。

相比於Python的40個特性,Go只有31個,可以說Go在語言設計上是相當剋制的。比如,它沒有隱式的數值轉換,沒有構造函數和析構函數,沒有運算符重載,沒有默認參數,也沒有繼承,沒有泛型,沒有異常,沒有宏,沒有函數修飾,更沒有線程局部存儲。

但是Go的特點也很鮮明,比如,它擁有協程、自動垃圾回收、包管理系統、一等公民的函數、棧空間管理等。

Go作為靜態類型語言,保證了Go在運行效率、內存用量、類型安全都要強於Python和Erlang。

Go的數據類型也更加豐富,除了支持表、字典等複雜的數據結構,還支持指針和接口類型,這是Python和Erlang所沒有的。特別是接口類型特別強大,它提供了管理類型系統的手段。而指針類型提供了管理內存的手段,這讓Go進入底層軟件開發提供了強有力的支持。

Go在面對對象的特性支持上做了很多反思和取捨,它沒有類、虛函數、繼承、泛型等特性。Go語言中面向對象編程的核心是組合和方法(function)。組合很類似於C語言的struct結構體的組合方式,方法類似於Java的接口(Interface),但是使用方法上與對象更加解耦,減少了對對象內部的侵入。Erlang則不支持面對對象編程範式,相比而言,Python對面對對象範式的支持最為全面。

在函數式編程的特性支持上,Erlang作為函數式語言,支持最為全面。但是基本的函數式語言特性,如lambda、高階函數、curry等,三種語言都支持。

控制流的特性支持上,三種語言都差不多。Erlang支持尾遞歸優化,這給它在函數式編程上帶來便利。而Go在通過動態擴展協程棧的方式來支持深度遞歸調用。Python則在深度遞歸調用上經常被爆棧。

Go和Erlang的併發模型都來源於CSP,但是Erlang是基於actor和消息傳遞(mailbox)的併發實現,Go是基於goroutine和管道(channel)的併發實現。不管Erlang的actor還是Go的goroutine,都滿足協程的特點:由編程語言實現和調度,切換在用戶態完成,創建銷燬開銷很小。至於Python,其多線程的切換和調度是基於操作系統實現,而且因為GIL的大坑級存在,無法真正做到並行。

而且從筆者的併發編程體驗上看,Erlang的函數式編程語法風格和其OTP behavior框架提供的晦澀的回調(callback)使用方法,對大部分的程序員,如C/C++和Java出身的程序員來說,有一定的入門門檻和挑戰。而被稱為“互聯網時代的C”的Go,其類C的語法和控制流,以及面對對象的編程範式,編程體驗則好很多。

"

相關推薦

推薦中...