首頁  >  文章  >  後端開發  >  go語言借鏡了哪些語言

go語言借鏡了哪些語言

青灯夜游
青灯夜游原創
2023-01-30 18:13:523101瀏覽

go語言借鏡了C、Pascal和CSP。 Go的許多語言特性借鑒與它的三個祖先:C、Pascal和CSP。 Go的語法、資料型態、控制流等繼承自C;Go的包、面對對像等想法來自Pascal分支;而Go最大的語言特色,基於管道通信的協程並發模型,則藉鑑於CSP分支。

go語言借鏡了哪些語言

本教學操作環境: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是由那些開發大型系統的人設計的,同時也是為了這些人服務的;它是為了解決工程上的問題,不是為了研究語言設計;它 還是為了讓我們的程式設計變得更舒適和方便。 go語言借鏡了哪些語言

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

4、Go語言的特色:

沒有繼承多態的物件導向

強一致類型go語言借鏡了哪些語言

interface不需要明確聲明(Duck Typing)

沒有異常處理(Error is value)

基於首字母的可訪問特性

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

go語言借鏡了哪些語言 #完整且卓越的標準庫包

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

二、Go語言的優點 

## ####1、學習曲線容易######Go語言語法簡單,包含了類別C語法。因為Go語言容易學習,所以一個普通的大學生花幾個星期就能寫出來可以上手的、高效能的應用。在國內大家都追求快,這也是為什麼國內Go流行的原因之一。 ############### Go 語言的語法特性簡直是太簡單了,簡單到你幾乎玩不出什麼花招,直來直去的,學習曲線很低,上手非常快。 ######2、效率:快速的編譯時間,開發效率和運行效率高######開發過程中相較於Java 和C 呆滯的編譯速度,Go 的快速編譯時間是一個主要的效率優勢。 Go擁有接近C的運作效率和接近PHP的開發效率。 ###### ######### C 語言的理念是信任程式設計師,保持語言的小巧,不屏蔽底層且底層友好,專注於語言的執行效率和表現。而 Python 的姿態是用盡量少的程式碼完成盡量多的事。於是我能夠感覺到,Go 語言想要把 C 和 Python 統一起 來,這是多棒的一件事。 ######3、出身名門、血統純正 ######之所以說Go出身名門,從Go語言的創造者就可見端倪,Go語言絕對血統純正。其次Go語言出自Google公司,Google在業界的知名度和實力自然不用多說。 Google公司聚集了一批牛人,在各種程式語言稱雄爭霸的 局面下推出新的程式語言,自然有它的策略考量。而且從Go語言的發展態勢來看,Google對它這個新的寵兒還是很看重的,Go自然有一個良好的發展前途。 ############### 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語言借鏡了哪些語言

8、穩定性 

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

三、對比其他語言

Go的許多語言特性借鑒與它的三個祖先:C,Pascal和CSP。 Go的語法、資料型態、控制流等繼承自C,Go的包、面對對像等想法來自Pascal分支,而Go最大的語言特色,基於管道通信的協程並發模型,則藉鑑於 CSP分支。

go語言借鏡了哪些語言

 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語言借鏡了哪些語言的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn