Go 語言的面世是為了解決什麼問題,新的語言出現的動力是什麼? | 知乎問答精選

 

A-A+

Go 語言的面世是為了解決什麼問題,新的語言出現的動力是什麼?

2018年08月16日 知乎問答精選 暫無評論 閱讀 4 ℃ 次

【劉典的回答(68票)】:

編程語言作為工具和其他所有工具的目的是一樣的,就是為了提高生產力。Go語言也不例外,Go語言也有GC、也支持Erlang式的輕量級並發,Go語言最有價值的地方是對現有OOP的改進,現在無論什麼語言只要支持OOP就一定會有一個龐大的繼承樹,但是無論這個樹設計的多龐大多精巧它仍然是一個靜態的結構,一旦和實際問題不匹配就要寫一堆Adapter。而Go語言採用完全不用的方法,類之間不存在靜態的繼承或者實現關係,這種關係直到使用它的時候才確定,比如java中FileInputStream實現了InputStream接口,這個關係在定義FileInputStream的時候就要確定,而Go語言中定義FileInputStream時不需要指定它要實現的接口,如果這個類裡面實現的方法剛好和滿足InputStream那你就可以認為實現了InputStream接口。這種實現方式意味著Go語言不再有傳統的OOP存在的各種煩惱,同時又提供了相同的表達能力,而且更優雅。

圖靈等價的編程語言之間不存在一個語言能解決而另外一個語言不能解決的問題,只能說一個語言比另外一個語言解決某種問題更優雅,Go語言因對OOP做的創新,在對像建模上更容易,類似Erlang的並發某行讓開發高並發網絡應用時可以大幅降低邏輯複雜性。

提高了生產力就是收益。

【梁濤的回答(14票)】:

0. 語義化更精確(功能更為正交)的關鍵字,簡短而清晰,用於對特定程序邏輯的封裝與語法糖化,減少工作量;

1. 內建對多核與並行計算的支持(與Erlang類似),以管道形式描述並行邏輯,將串行、並行邏輯很自然地揉合到一起,強化可讀性和理解效率;

2. 與C相近的語法習慣與性能,通過GC機制去除惱人的指針管理,通過意義明確語法去除低級Bug;

3. 兼容Java那種量級的企業應用或工業應用的開發能力與開發效率。

【布爾謝特的回答(6票)】:

golang 部署非常方便。不用 cgo 的話就是靜態鏈接。直接拷貝過去就能用。這個優點,沒有在多個發行版中部署程序的經歷,是體會不到得。如果是python或者php,configure的時候少了什麼,哪個庫依賴哪個庫,直接搞死人。

golang 的庫小而齊全。基本夠用。

庫的安裝也是見過的語言中最方便的,安裝github上的第三方庫只用一條命令。非常現代化。

語言上的特點前面的人都說過了,也是很有特色的。

golang 像一把瑞士軍刀。確實解決了一些繁瑣。這類新語言值得去開發。

golang 的作者隨便抽一個出來都是大牛。這跟其他語言不大一樣。

【鄧毅的回答(5票)】:

go 是一個相對較新的語言,編程語言的發展的一個趨勢就是把一些發現被經常使用的功能或者操作從語言級別進行支持,從而使用這些功能的時候非常的方便。同時,對於一些複雜的情況,語言級別的支持還可以更容易保證一些細節的正確性。

以下是一些我覺得比較特別的設計:

  1. 並發編程先進的支持。既然叫 go 語言,go routine 是核心的亮點肯定不奇怪。用go來寫並發的邏輯,用語言原生支持的 go routine、channel 和原生 select 語句,加上利用閉包處理上下文,使得之前並發處理的一些需要比較高的技巧和瑣碎的事情消失了(共享資源、數據序列化、數據完整性、鎖、信號燈、通知機制、sleep等等等等)所以,很容易正確的寫出並發程序。
  2. defer 是個很好的想法,try ... finally 的升級版,更加靈活,可以更容易的讓資源的分配與釋放代碼放在一起。
  3. 其他保留了一些現代語言的特點:GC,map的原生支持,for/if/switch 等語法的優化,都很不錯

【楊龍的回答(4票)】:

誰讓我是C/GO實習生呢,雖然才開始一個多月,哈哈~

我從實際使用角度聊一點淺見。

Go現在一般稱為golang了, 我最大的感覺是簡潔,結構非常清晰。

Go設計的目的很明確:沒找到原句,大概意思是:

學習編程語言已經越來越難,語言本身已經越來越複雜。

如果一門語言能解決同樣的問題,但是寫起來更高效,別人更易理解,

這已經解決很大的問題了。

Go整合了多門語言的精華,我實際體會在以下幾個方面:

對線程的強大支持,Go裡叫並發,這一句:Go function(),這個線程就跑起來了,多簡單?

對通信簡化,有專門的chan 這個類型,用於管道通信,做socket的時候簡化好多,

對web的強大支持,有goweb包,我沒接觸過xml的也很快開始解析網頁然後鏈接mysql了。

Go有可繼承的struct類型,有interface接口,可以做面向對象了。

GO定位在系統編程,目標是取代C plusplus的地位。

【何李石的回答(2票)】:

沒有哪個語言能夠解決其它語言無法解決的問題,只要它是可圖靈的。

Go沒有多少新東西,即使是語法也都是從其它語言學來的。但它讓你更好的並發更好的利用多核資源,更方便的在線程/協程之間通信,更好的管理內存。

【Timmy的回答(1票)】:

直接看官網給的答案吧

golang.org/doc/go_faq.h

再參見Rob Pike的演講"public static void"

youtube.com/watch? (需翻牆, 有英文字幕)

v.youku.com/v_show/id_X (無字幕)

【韓非的回答(1票)】:

歸根結底,還是為了提高開發效率,在基本不損失運行效率的前提下。

【付雲閣的回答(0票)】:

首先Go是個開源項目,而且借用某位網友的話,它將rewrite the world,對這個項目不能以「收益」這類東西來衡量。

【文良顏醜的回答(0票)】:

為了降低c/c++那些語言的複雜度,又需要一個高性能的語言.提高生存力..具體對google自己的利益最直接的是能讓用戶在其產品裡得到更大更好的開發空間.比如google app engine

我覺得算是編譯型的腳本語言,因為他能像腳本簡短又幹大事,性能又不差.所以我學來做為服務端開發的第2語言.

【海濤的回答(0票)】:

語言的終極目標:

開發(包括維護)高效,運行(包括部署)高效

目前,基本沒有什麼語言能同時滿足這2個高效(除了delphi,但它只限於win平台,而且已經被冷落多年)

所以google(相當於各個公司的奇客形象)自創了go這一個新語?

標籤:-Go語言


相關資源:


標籤:



給我留言