0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    關(guān)注

    180

    文章

    7622

    瀏覽量

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

    關(guān)注

    1

    文章

    158

    瀏覽量

    9205

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

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

收藏 0人收藏

    評(píng)論

    相關(guān)推薦

    Go語言簡(jiǎn)介和安裝方法

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

    Go語言常量的聲明

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

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

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

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

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

    會(huì)go語言能做什么工作?

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

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

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

    學(xué)習(xí)Go語言PDF電子書免費(fèi)下載

    這是關(guān)于來自Google 的Go語言的簡(jiǎn)介。目標(biāo)是為這個(gè)新的、革命性的語言提供一個(gè)指南。
    發(fā)表于 08-29 16:30 ?10次下載
    學(xué)習(xí)<b class='flag-5'>Go</b><b class='flag-5'>語言</b>PDF電子書免費(fèi)下載

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

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

    詳解GO語言的趨勢(shì)與使用情況

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

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

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

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

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

    go語言枚舉類型怎么用

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

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

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

    帶你了解go語言中的閉包

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

    go語言中怎么使用HTTP代理

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

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品