<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

網易有道CEO周楓推薦Go語言并介紹Go語言的3個優點

DPVg_AI_era ? 2018-01-31 14:11 ? 次閱讀

網易有道CEO周楓推薦Go語言。他認為Go很好地繼承了C語言靈活、簡單有效的思想;Go有很高的生產效率;Go精選了一些復雜事情的優秀解決辦法,通過語言功能和標準庫提供出來。

Go語言作為一個新的編程語言(8年歷史,對比C的40年,Java的20年很年輕了),很多人都挺喜歡,也寫了不少推薦,互聯網公司中在生產系統中使用Go的(主要是在云端服務中)也在逐漸增多。剛好這幾天和同事討論到這個話題,這里提供一個我的版本的推薦:

1.Go很好地繼承了C語言靈活、簡單有效的思想。我一直認為系統工程師應該讀Linux內核代碼,同一套代碼,可以跑在小到耳機,大到100核的服務器的所有設備上,而且改改配置就可以一鍵build出可跑的內核出來。這樣靈活的系統,代碼可讀性還相當不錯,歸功于C語言簡單有效的設計,讓C頗有點“增一分則太肥,減一分則太瘦”的意思。傳統的C++則是反面例子,新增語言功能的“投資回報”較差(C++11倒是解決了不少問題)。而Go繼承了C的這些風格,雖然細節不同,比如沒有指針算術,在底層系統操作方面靈活性有所下降,但在很多方面變得更強大(并發性、自動內存管理等等)。Go的關鍵詞數量甚至少于C(25 vs. 30左右),簡單性保持得很好。

2. Go有很高的生產效率。舉兩個例子,Go不需要build文件(Makefile, Java的build.xml, pom.xml這些),而是只需要執行"go build"即可,通過目錄結構自己找到項目結構。通過這樣的“約定優于配置”(convention over configuration)的設計,大大提高了效率。第二個例子是調用C代碼的cgo的設計,使用過Java的JNI(包括Android的NDK)的朋友應該知道,那來回生成.h文件,自己編譯DLL/.so的感覺是很酸爽的。而在Go這里簡單到可以把C代碼直接嵌到Go代碼同一個文件里,然后"go build"就可以。效率就是節省的生命和金錢啊。

3. Go精選了一些復雜事情的優秀解決辦法,通過語言功能和標準庫提供出來。比如并發性功能,goroutine和channels的確就是比線程和流更好的抽象。而JSON/XML/HTTP/正則表達式這些,都有標準庫的良好支持。這里Go有別于Swift,在語言特性的引入上很克制,很“精選”。對比Go,Swift感覺有點像個“學究”型的語言,引入了大批的語言特性,每個都很正確,但合起來就變得感覺繁瑣。

下面翻譯一篇“Golang的微妙的生產力”(The Subtle Productivity of Golang),作者Paul Hoehne,把這個話題再說說。

我承認我對新的編程語言很著迷(或者甚至嘗試使用對我是新的老編程語言)。但我只會對促進生產力的語言感興趣。一年前,我試了試Go,發現了一種我多年沒有感覺到的舒適感和生產力。當然,你也可以用其他語言做很多相同的事情。但是,像許多年前的C語言一樣,Go是一種在我的頭腦中我可以完全掌握的語言??梢园阉醋魇窃诨疑镔|緩存中運行,而不需要因為緩存缺失而訪問stackoverflow.com。

隨著語言的發展,增加了類似于并發(C++14)或泛型(Java和C#幾年前)的特性,它們變得更大、更復雜。C有大約30個關鍵字,C#有64個,Java有53個左右,C++14個大約有80個。而Go大約有25個。關鍵詞并不是衡量語言復雜性的唯一標準。在C語言中編寫應用程序常常比在Java中更乏味。但關鍵字確實給人一種概念空間,開發人員在使用特定語言時需要處理這些概念。

我在研究生院花了很多時間用vi寫C語言,沒有自動完成功能,也很少打開手冊。我用man pages來進行系統和庫調用,但是我有足夠多的內存在我的耳朵之間,以記憶住基本的調用(open, creat, trunc, read, write等等)。有一種形式的生產力來自于“能緩存住所有東西”。

我無法想象,如果沒有支持自動完成、或立即語法檢查等功能的IDE的情況下,Java編程的生產效率。當然,Java可以做很多事情,但是它是有非常大的庫的非常大的語言。聲明main函數需要三個關鍵字(public static void),更不用說類聲明的開銷了。即使是我們認為理所當然的特性,HTTP服務,也利用了幾層庫。Java沒有HTTP服務提供者或服務使用者這樣的“內含電池”的服務,這意味著您可能需要考慮使用Netty或嵌入式Tomcat。

我可以在沒有獨特功能的文本編輯器中寫Go。它是現代的語言,具有并發性、良好的unicode支持、以及包含HTTP服務等現代特性。它感覺和C一樣舒服,但是和Java一樣高效。對于一些人來說,“舒適”的語言是一種奇怪的概念,但是語言是一種工具,一種舒適的、易于使用的工具通常是一種更好的工具。

我也覺得,長期而言,Go將成為容器化數據中心的語言。它靜態地編譯成二進制文件,因此運行時需求非常低。Java、Python、C#等要求容器具有相應的運行時安裝的正確版本。而編寫Go應用程序很容易,它只使用普通的Linux容器,而不需要額外的依賴。它從同一個代碼庫編譯到Windows, Linux, Mac OS, ARM目標。它允許我將一個應用程序作為單一的可執行的二進制文件交付。

為什么不是每個人都用它呢?首先,它是新的。我知道許多企業仍然在運行PowerBuilder應用程序和基于JDK 6的服務。哎呀,我今天早上在app上買的咖啡可能會在某個時候運行40年前的COBOL代碼。Go 1.0只有5歲。Java大約有20年的歷史,C#稍微年輕一些,但是Java和C#當年滿足了真正的需要,降低了編寫應用程序的成本。在20世紀90年代后期,人們想當然地認為你會用C++編寫應用,而用Visual Basic作為其前端。大量調試的時間花在奇怪的COM錯誤或內存損壞上。用Go代替Java的理由不像停止用C++來懲罰自己那樣強大。但是,當當我們遷移到一個基于容器的世界,而Java變得越來越臃腫,那我認為Go會獲得優勢。

隨著越來越多的開發人員使用Go,他們會發現,能夠將整個語言(以及一些關鍵的庫)保持在您的頭腦中會導致一種微妙的生產力形式。而這一特點,正是其他越來越龐大、越來越復雜的語言所缺乏的。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7538

    瀏覽量

    130268
  • go語言
    +關注

    關注

    1

    文章

    156

    瀏覽量

    8939

原文標題:網易有道CEO周楓:Go語言繼承了C語言的靈活簡單

文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Go語言簡介和安裝方法

    Go 又稱 Golang ,是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 開發的一種靜態強類型、編譯型語言。Go 語言語法與
    發表于 07-19 16:33 ?424次閱讀

    Go語言中的整數類型

    Go 語言中,整型可以細分成兩個種類十個類型。
    發表于 07-20 15:25 ?350次閱讀

    Go語言開發有什么優勢?怎么學?

    帶來的各種問題?! ?b class='flag-5'>3. 性能優異。Go的性能只比C/C++減少了10%左右。相對其他腳本(python/php),性能具有巨大的優勢?! ∧敲?,Go語言都有哪些公司在用呢?比如goo
    發表于 12-19 16:08

    go語言能做什么工作?

    Go語言主要用作服務器端開發,其定位是用來開發“大型軟件”的,適合于很多程序員一起開發大型軟件,并且開發周期長,支持云計算的網絡服務。Go語言能夠讓程序員快速開發,并且在軟件不斷的增長
    發表于 03-22 15:03

    Go開發語言的優勢在哪里?

    Go語言是谷歌發布的第二款開源編程語言,可以在不損失應用程序性能的情況下降低代碼的復雜性,專門針對多處理器系統應用程序的編程進行了優化,開發速度極快,可以與C或C++媲美,而且更加安
    發表于 03-22 15:04

    GO語言的可靠性和持久性

    作者在本文介紹了Dropbox公司是如何開啟探索使用Go語言之路的,在探索的過程中遇到了哪些問題,從結果來看證明了Go語言的可靠性和持久性。
    發表于 09-28 16:18 ?0次下載

    詳解GO語言的趨勢與使用情況

    Go 語言簡單易學、性能優良。JetBrains Blog 發布了Go 語言的調查報告,看看GO 語言
    的頭像 發表于 03-17 11:05 ?2826次閱讀

    go語言枚舉類型怎么用

    go 語言枚舉類型是這么用的?在什么場景下會用到枚舉?本文對 go 語言枚舉做了詳細講解。 枚舉,是一種重要的數據類型,由一組鍵值對組成,通常用來在編程
    的頭像 發表于 09-02 09:43 ?4910次閱讀

    詳細介紹go語言中的閉包的實現

    什么是閉包? 什么場景下會用閉包 ? 本文對 go 語言中的閉包做了詳細介紹。 閉包是由函數及其相關引用環境組合而成的實體(即:閉包=函數+引用環境)。 Go中的閉包 閉包是函數式
    的頭像 發表于 10-20 16:18 ?1698次閱讀

    Go語言創始人反對在Go 1.18的標準庫中引入泛型支持

    近日,Go 語言創始人之一 Rob Pike 在 Github 上發表評論引發關注。據悉,他已在 Go 代碼倉庫提交了一個 issue (#48918),反對在 Go 1.18 的標準
    的頭像 發表于 10-26 09:45 ?1671次閱讀
    <b class='flag-5'>Go</b><b class='flag-5'>語言</b>創始人反對在<b class='flag-5'>Go</b> 1.18的標準庫中引入泛型支持

    帶你了解go語言中的閉包

    ? 【 導讀】什么是閉包? 什么場景下會用閉包 ? 本文對 go 語言中的閉包做了詳細介紹。 閉包是由函數及其相關引用環境組合而成的實體(即:閉包=函數+引用環境)。 Go中的閉包 閉
    的頭像 發表于 11-02 15:27 ?2217次閱讀

    Go 語言在極小硬件上的運用(三) | Linux 中國

    Go 語言在極小硬件上的運用(三) | Linux 中國
    發表于 11-23 18:21 ?8次下載
    <b class='flag-5'>Go</b> <b class='flag-5'>語言</b>在極小硬件上的運用(三) | Linux 中國

    Go并發模型的實現原理

    Go語言是為并發而生的語言,Go語言是為數不多的在語言層面實現并發的
    的頭像 發表于 04-15 08:49 ?1073次閱讀

    go語言中怎么使用HTTP代理

    go語言中怎么使用HTTP代理。
    的頭像 發表于 09-01 14:41 ?2210次閱讀

    Go語言比Python強多少

    1.都說Go語言性能非常強大,那么到底比Python強多少? 為了比較Go語言和Python語言在單線程性能上的差距,我們可以做一個簡單實驗
    的頭像 發表于 11-02 14:05 ?297次閱讀
    <b class='flag-5'>Go</b><b class='flag-5'>語言</b>比Python強多少
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>