go語言借鑑了哪些語言

2023-01-31 06:02:21

go語言借鑑了C、Pascal和CSP。Go的很多語言特性借鑑與它的三個祖先:C、Pascal和CSP。Go的語法、資料型別、控制流等繼承於C;Go的包、面對物件等思想來源於Pascal分支;而Go最大的語言特色,基於管道通訊的協程並行模型,則借鑑於CSP分支。

本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。

一、Go語言設計初衷

1、設計Go語言是為了解決當時Google開發遇到的問題:

  • 大量的C++程式碼,同時又引入了Java和Python
  • 成千上萬的工程師
  • 數以萬計行的程式碼
  • 分散式的編譯系統
  • 數百萬的伺服器

2、Google開發中的痛點:

  • 編譯慢
  • 失控的依賴
  • 每個工程師只是用了一個語言裡面的一部分
  • 程式難以維護(可讀性差、檔案不清晰等)
  • 更新的花費越來越長
  • 交叉編譯困難

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

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

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

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

4、Go語言的特色:

  • 沒有繼承多型的物件導向
  • 強一致型別
  • interface不需要顯式宣告(Duck Typing)
  • 沒有例外處理(Error is value)
  • 基於首字母的可存取特性
  • 不用的import或者變數引起編譯錯誤
  • 完整而卓越的標準庫包
  • Go內建runtime(作用是效能監控、垃圾回收等)

二、Go語言的優勢

1、學習曲線容易

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

1.png

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

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

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

2.png

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

3、出身名門、血統純正

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

3.png

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 上執行一個函數需要最小的程式碼。

4.png

8、穩定性

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

三、對比其他語言

Go的很多語言特性借鑑與它的三個祖先:C,Pascal和CSP。Go的語法、資料型別、控制流等繼承於C,Go的包、面對物件等思想來源於Pascal分支,而Go最大的語言特色,基於管道通訊的協程並行模型,則借鑑於 CSP分支。

5.png

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語言也不例外。比如,C語言的依賴管理、C++ 的 垃圾回收、Java 笨重的型別系統和厚重的 Java EE 規範,以及指令碼語言(如 PHP、Python 和 Ruby)的效能,這些都是很多開發者社群經常爭論和抱怨的問題。

擴充套件知識:

Go語言的優勢

Go語言是集多程式設計正規化之大成者,體現了優秀的軟體工程思想和原則,其特性可以使開發者快速地開發、測試和部署程式,大大提高了生產效率。下面我們來看看與其他主流語言相比,Go語言具有的優勢。

1) 相對於 C/C++ 來講,Go語言擁有清晰的依賴管理和全自動的垃圾回收機制,因此其程式碼量大大降低,開發效率大大提高。

2) 相對於 Java 來講,Go語言擁有簡明的型別系統、函數語言程式設計正規化和先進的並行程式設計模型。因此其程式碼塊更小更簡潔、可重用性更高,並可在多核計算環境下更快地執行。

3) 對於 PHP 來講,Go語言更具通用性和規範性。這使得其更適合構建大型的軟體,並能夠更好地將各個模組組織在一起。在效能方面,PHP 不可與 Go 同日而語。

4) 對於 Python/Ruby 來講,Go 的優勢在於其簡潔的語法、非侵入式和扁平化的型別系統和渾然天成的多正規化程式設計模型。與 PHP 一樣,Python 和 Ruby 也是動態型別的直譯語言,這就意味著它們的執行速度會比靜態型別的 編譯型語言慢很多。

總而言之,Go語言對於當前大多數主流語言來講,最大的優勢在於具有較高的生產效率、先進的依賴管理和型別系統,以及原生的平行計算支援。因此,Go語言自發布以來就受到了各個領域開發者的關注和青睞。

Go語言的劣勢

下面,我們來客觀地看一下目前Go語言需要加強或改進的地方(雖然有些 Gopher 並不這麼認為)。

1) 從分散式計算的角度來看,Go語言的成熟度不及 Erlang(現在已經出現了一些這方面的Go語言程式碼包,我們已經可以看到光明的未來了)。

2) 從程式執行速度的角度來看,Go語言雖然已與 Java 不相上下,但還不及 C(差距正在不斷地縮小)。

3) 從第三方庫的角度來看,Go語言的庫數量還遠遠不及其他幾門主流語言(比如 Java、Python、Ruby 等)。不過與Go語言的年紀相比,用它實現的第三方庫已經相當多了,並且它們的數量在持續地飛速增長中。

另外,在更深的層面,Go語言標準庫中也有些不盡如人意的的地方,具體如下。

1) 從語言語法角度來看,Go語言語法裡的語法糖並不多,這讓許多 Python、Ruby 愛好者們對它不屑一顧。另外,變數賦值方式多得有點兒累贅了。最讓人遺憾的也是我比較在意的一個地方是,Go語言不支援自定義的泛型類 型。

2) 從並行程式設計角度來看,Go語言提供的並行模型很強大,但也有一些編寫規則需要了解。否則,很容易踩進「坑」裡。其實不提倡把這叫作「坑」。因為這些所謂的「坑」,大都是我們由於對原理不熟悉而自己挖出來的。

3) 從垃圾回收角度看,Go語言的垃圾回收採用的是並行的標記清除演演算法(Concurrent Mark and Sweep,CMS)。雖然是並行的操作,時間比序列操作短很多,但是還是會在垃圾回收期間停止所有使用者程式的操作。這一點多少會 影響到對實時性要求比較高的應用。不過,在Go語言 1.3 之後的版本中,這方面的問題已經得到了極大的改善。

雖然Go語言還有一些瑕疵,但從整體來看,它已經是一門非常優秀的通用程式語言了。並且,Go語言在今後的發展上會關注效能、可靠性、可移植性和一些功能增強,所以上述缺憾會隨著版本的推進而逐漸減弱和消失。

【相關推薦:Go視訊教學、】

以上就是go語言借鑑了哪些語言的詳細內容,更多請關注TW511.COM其它相關文章!