RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

網(wǎng)易有道CEO周楓推薦Go語言并介紹Go語言的3個優(yōu)點

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

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

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

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

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

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

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

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

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

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

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

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

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

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

隨著越來越多的開發(fā)人員使用Go,他們會發(fā)現(xiàn),能夠?qū)⒄麄€語言(以及一些關(guān)鍵的庫)保持在您的頭腦中會導致一種微妙的生產(chǎn)力形式。而這一特點,正是其他越來越龐大、越來越復雜的語言所缺乏的。

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

    關(guān)注

    180

    文章

    7604

    瀏覽量

    136683
  • go語言
    +關(guān)注

    關(guān)注

    1

    文章

    158

    瀏覽量

    9047

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

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

收藏 人收藏

    評論

    相關(guān)推薦

    Go語言簡介和安裝方法

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

    Go語言常量的聲明

    Go 語言中, 常量 表示的是固定的值,常量表達式的值在編譯期進行計算,常量的值不可以修改。例如:3 、 Let's go 、 3.14 等等。常量中的數(shù)據(jù)類型只可以是
    發(fā)表于 07-20 15:24 ?403次閱讀

    Go語言中的整數(shù)類型

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

    Go語言開發(fā)有什么優(yōu)勢?怎么學?

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

    go語言能做什么工作?

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

    Go開發(fā)語言的優(yōu)勢在哪里?

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

    華為云的Go語言編程的眾多干貨

    ? 近日,國內(nèi)較權(quán)威的Go大會——Gopher China召開,眾多一線互聯(lián)網(wǎng)公司的大神們匯聚一堂,深入探討了Go語言產(chǎn)生了諸多干貨。其中,華為云微服務首席架構(gòu)師田曉亮老師也受邀參與
    的頭像 發(fā)表于 12-17 17:59 ?2214次閱讀

    Go語言在世界各地的使用情況如何?

    【導讀】Go語言在世界各地的使用情況如何?數(shù)據(jù)說話,帶你直觀感受什么叫“酷小孩都用的語言”! JetBrains 官方博客發(fā)表了一篇題為"The state of Go"的文章,他們通
    的頭像 發(fā)表于 02-26 14:10 ?4056次閱讀
    <b class='flag-5'>Go</b><b class='flag-5'>語言</b>在世界各地的使用情況如何?

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

    Go 語言簡單易學、性能優(yōu)良。JetBrains Blog 發(fā)布了Go 語言的調(diào)查報告,看看GO 語言
    的頭像 發(fā)表于 03-17 11:05 ?3042次閱讀

    Go語言憑借什么成為云原生第一語言的?

    偶然看到有人說, Go 語言目前的火爆可能就是曇花一現(xiàn)而已。這個觀點我當然是不認同的。 近幾年,關(guān)于 Go 與 Java 還有 C 的對比和討論愈演愈烈,但不可否認的是,在十年多的時間里,Go
    的頭像 發(fā)表于 04-22 10:15 ?3183次閱讀
    <b class='flag-5'>Go</b><b class='flag-5'>語言</b>憑借什么成為云原生第一<b class='flag-5'>語言</b>的?

    詳解剖析Go語言調(diào)度模型的設(shè)計

    golang的MPG調(diào)度模型是保障Go語言效率高的一重要特性,本文詳細介紹Go語言調(diào)度模型的
    的頭像 發(fā)表于 07-26 10:12 ?2082次閱讀
    詳解剖析<b class='flag-5'>Go</b><b class='flag-5'>語言</b>調(diào)度模型的設(shè)計

    go語言枚舉類型怎么用

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

    詳細介紹go語言中的閉包的實現(xiàn)

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

    帶你了解go語言中的閉包

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

    go語言中怎么使用HTTP代理

    go語言中怎么使用HTTP代理。
    的頭像 發(fā)表于 09-01 14:41 ?2411次閱讀
    RM新时代网站-首页