自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Google的親兒子Go是完美的編程語(yǔ)言嗎?

開(kāi)發(fā) 后端
GO是Google開(kāi)發(fā)的一種靜態(tài)、強(qiáng)類(lèi)型、編譯型、并發(fā)型,并具有垃圾回收功能的類(lèi)C編程語(yǔ)言。2009以開(kāi)源項(xiàng)目的形式發(fā)布,2012年發(fā)布1.0穩(wěn)定版本,距今已經(jīng)十年了。

#引言

團(tuán)隊(duì)有項(xiàng)目考慮用GO重寫(xiě),所以花了些時(shí)間調(diào)研GO。

Google的親兒子Go是***的編程語(yǔ)言嗎?

***次接觸GO是5年前,14年4月份,也是在我司,全職鉆研一周,彼時(shí)C++中毒太深,內(nèi)心排斥其他編程語(yǔ)言,看其他語(yǔ)法總覺(jué)得有點(diǎn)怪,而且有“C/C++能做任何事,故無(wú)用其他語(yǔ)言之必要”的思想在作祟。

我讀研階段用過(guò)幾年Java,工作以來(lái)一直使用C++/C,況且教出幾個(gè)非計(jì)算機(jī)系(包括英語(yǔ)系)的職業(yè)程序員,所以,我就浮夸一回,聲稱(chēng)熟練掌握C++吧。

[[265272]] 

人都有思維定勢(shì),受限于自己的經(jīng)驗(yàn)和認(rèn)知,我亦不能例外,但好在我意識(shí)到這一點(diǎn),所以在調(diào)研過(guò)程中,努力摒棄成見(jiàn),盡量擺脫慣性,查閱關(guān)于GO的各種(包括核心設(shè)計(jì)師)文章,傾聽(tīng)擁躉和批評(píng)者的不同聲音,結(jié)合自己的思考和分析,力求客觀(guān)公正去評(píng)價(jià)GO。

#GO語(yǔ)言簡(jiǎn)介

GO是Google開(kāi)發(fā)的一種靜態(tài)、強(qiáng)類(lèi)型、編譯型、并發(fā)型,并具有垃圾回收功能的類(lèi)C編程語(yǔ)言。2009以開(kāi)源項(xiàng)目的形式發(fā)布,2012年發(fā)布1.0穩(wěn)定版本,距今已經(jīng)十年了。

發(fā)明一種新的編程語(yǔ)言,首先得找到必要性,不然肯定會(huì)被質(zhì)疑重復(fù)造輪子,方法嘛?無(wú)非是先找某種語(yǔ)言的一些茬,吐槽一番,復(fù)雜、笨拙、低效,太TM沙雕了,不能忍,勞資要立刻馬上分分鐘擼出一種新的編程語(yǔ)言,***解決所有問(wèn)題,不然對(duì)不起我卓爾不群的智商。

[[265273]]

 

GO的故事也很套路,G公司的Pike大牛聽(tīng)完C++0x的演講,回到辦公室,開(kāi)始編譯C++,等待編譯過(guò)程中,轉(zhuǎn)過(guò)椅子面向Robert,討論語(yǔ)言的問(wèn)題,然后拉上Ken爺爺一起合計(jì),群嘲之后,受不了C++某些沙雕設(shè)計(jì),還沒(méi)等編譯完成,三個(gè)老男人便一拍即合,決定一起搞點(diǎn)change the world的偉大事情,于是乎,GO誕生了。

GO語(yǔ)言之父Pike提到:GO語(yǔ)言是以C為原型,以C++為目標(biāo)而設(shè)計(jì)的,希望C++程序員能以GO作為替代品。因?yàn)樗X(jué)得C++忒復(fù)雜了,要解救程序員于水火。

雖然GO以C++為目標(biāo)而設(shè)計(jì),但尷尬的是,Pike坦承GO并沒(méi)有吸引來(lái)多少C++程序員,反而是吸引了不少Python、Ruby程序員。這、這、這、這。

#GO核心團(tuán)隊(duì)

G公司不差錢(qián)不缺人,GO團(tuán)隊(duì)更是群星薈萃、大咖云集,不廢話(huà),直接上圖:

Google的親兒子Go是***的編程語(yǔ)言嗎? 

核心設(shè)計(jì)師Pike和Ken都是出身自貝爾實(shí)驗(yàn)室,Ken之于Pike,亦師亦友,共同發(fā)明了UTF-8,還基情四射地結(jié)對(duì)編程過(guò),感情好的穿一條褲子。

Pike是Unix先驅(qū),貝爾實(shí)驗(yàn)室最早跟Ken、Dennis一起開(kāi)發(fā)Unix的猛人,Plan9 OS的靈魂人物。大胡子Ken爺爺則是Unix之父,和Dennis一起發(fā)明了C語(yǔ)言,殿堂骨灰級(jí)程序員,早已是名滿(mǎn)天下。

技術(shù)實(shí)力毋容置疑,不過(guò)這哥倆都是玩Kernel的,經(jīng)歷相同,理念相近,分歧會(huì)比較少,他們也都坦承C用得最多最熟,所以注定了GO的類(lèi)C特性,不過(guò)這會(huì)不會(huì)導(dǎo)致GO設(shè)計(jì)上的思維火花不足,對(duì)OOP以及現(xiàn)代編程思想的支持不足,亦未可知。

#GO的哲學(xué)

哲學(xué)是難分對(duì)錯(cuò)的,GO有GO的哲學(xué),有它的取舍和審美,不一定每個(gè)人都認(rèn)同,我覺(jué)得還挺有道理的,羅列如下:

##少即是多

GO信奉:Less Is More,大道至簡(jiǎn),臆測(cè)是喬幫主的信徒。

##世界是并行的

世間萬(wàn)物是并行發(fā)生的,所以GO遵照這個(gè)規(guī)律,對(duì)并發(fā)的原生支持讓GO更易于描述并行世界。

##世界是物質(zhì)組成的

微觀(guān)世界由小的粒子組合成大的粒子;宏觀(guān)世界由小的物體組合成大的物體。繼承只能描述現(xiàn)實(shí)世界的一小部分,使用繼承是不全面的;GO的設(shè)計(jì)選擇的是組合,這個(gè)和現(xiàn)實(shí)世界比較吻合的設(shè)計(jì),表現(xiàn)力更強(qiáng)。

##世界是標(biāo)準(zhǔn)化的

硬件是標(biāo)準(zhǔn)化的,軟件也應(yīng)如此,GO的接口是DUCK模型,接口是非侵入式的。

##正交性

GO的多個(gè)特性都是正交性的,正交性是保持事物穩(wěn)定和簡(jiǎn)單的***設(shè)計(jì)。

##二八定律

80%代碼只使用20%特性,增加語(yǔ)言特性,并不能提升效率,反而會(huì)增加復(fù)雜性,提高犯錯(cuò)率,加重程序員心智負(fù)擔(dān)。

##統(tǒng)一格式化

C++語(yǔ)法自由自在,于是乎一群吊絲為tab or space、大括號(hào)要不要換行等諸如此類(lèi)的格式問(wèn)題吵得不可開(kāi)交。GO設(shè)計(jì)師認(rèn)為,都是吃飽了撐的,你們太愚蠢了。

于是GO規(guī)定左大括號(hào){不能換行放置,沒(méi)有為什么,對(duì)著干直接編譯不過(guò)。

GO編譯器內(nèi)建工具gofmt強(qiáng)制源碼格式化。對(duì)不起,沒(méi)有選項(xiàng),我的地盤(pán)聽(tīng)我的,把精力focus到真正重要的事情上來(lái),停止無(wú)意義的爭(zhēng)吵。

這其實(shí)也是一種哲學(xué):給你(我認(rèn)為)***的,而不是給你選擇。就像iPhone一樣,用戶(hù)太笨了,他們根本不知道自己需要什么,就讓幫主替你安排好一切吧。

不過(guò)GO強(qiáng)加個(gè)人喜好的一刀切做法,也招致批評(píng)和厭惡。有比較剛的程序員,直接因?yàn)榇罄ㄌ?hào)不讓換行而拋棄GO。

作為一個(gè)經(jīng)歷過(guò)各種妖媚代碼格式要求的程序員,我發(fā)出了杠鈴般的笑聲。

#GO的特色

GO是介于C與C++之間的語(yǔ)言,比C抽象層次高,比C++抽象層次低。

因?yàn)槭且婚T(mén)新的編程語(yǔ)言,站在巨人的肩膀,博采眾長(zhǎng),規(guī)避了一些已知的問(wèn)題,開(kāi)發(fā)了一些優(yōu)秀的特征,相比C/C++,GO的核心特征包括以下幾個(gè)方面:

1. 原生并發(fā),以東尼·霍爾的通信順序進(jìn)程(CSP)為基礎(chǔ)的goroutine,適合現(xiàn)代多核機(jī)器

2. 垃圾回收,非常高效(請(qǐng)來(lái)世界***內(nèi)存管理專(zhuān)家設(shè)計(jì))

3. 強(qiáng)大的標(biāo)準(zhǔn)庫(kù),對(duì)網(wǎng)絡(luò)編程等的良好支持

4. CGO提供了GO調(diào)用C機(jī)制,擴(kuò)展了GO的能力邊界

5. 內(nèi)嵌關(guān)聯(lián)數(shù)組

6. 非侵入式的接口設(shè)計(jì)

7. 簡(jiǎn)單清晰的語(yǔ)法,以及強(qiáng)編碼規(guī)則,好處可能遠(yuǎn)超想象

#GO vs C/C++

Google的親兒子Go是***的編程語(yǔ)言嗎?

 

[GO與C語(yǔ)法詳細(xì)對(duì)比](http://hyperpolyglot.org/c)

#性能對(duì)比

雖然GO號(hào)稱(chēng)兼?zhèn)銫++的運(yùn)行效率和PHP的開(kāi)發(fā)效率,但benchmarks好像打臉了,從數(shù)據(jù)上看,GO的運(yùn)行效率接近卻略低于Java。

Google的親兒子Go是***的編程語(yǔ)言嗎? 

#研發(fā)效率

Google的親兒子Go是***的編程語(yǔ)言嗎? 

我樂(lè)觀(guān)預(yù)計(jì)GO的研發(fā)效率上優(yōu)于C/C++,特別是*nix環(huán)境下。

#流行度

GO獲得TIOBE 2016年度***,2017年10月獲得第10,歷史***排名。

GO誕生10年,雖然背靠Google,但依然沒(méi)有挺進(jìn)編程語(yǔ)言***陣營(yíng) ,屬于外圍三線(xiàn)。

近一年多流行度排名有所下滑,鐵打的Java、C/C++,流水的編程語(yǔ)言。

Google的親兒子Go是***的編程語(yǔ)言嗎? 

#工程化水平

Google的親兒子Go是***的編程語(yǔ)言嗎?

 

知名項(xiàng)目:

Docker:大名鼎鼎的開(kāi)源應(yīng)用容器引擎

K8S:容器編排管理系統(tǒng)的事實(shí)標(biāo)準(zhǔn)

...

GO更適合開(kāi)發(fā)服務(wù)器端大型軟件,高性能分布式系統(tǒng)領(lǐng)域,網(wǎng)絡(luò)編程,并發(fā)編程,被譽(yù)為云時(shí)代的C語(yǔ)言。

GO成為云計(jì)算時(shí)代流行起來(lái),促進(jìn)了云計(jì)算的發(fā)展,Google用GO的多,今日頭條、Uber等公司也用GO對(duì)業(yè)務(wù)進(jìn)行了徹底的重構(gòu),golang.org YouTube.com也在使用GO開(kāi)發(fā)。

美國(guó)市值TOP20有一半在使用GO,國(guó)外很多初創(chuàng)公司選擇GO,國(guó)內(nèi)關(guān)注高,但還未得到廣泛應(yīng)用,應(yīng)用上呈現(xiàn)國(guó)外熱國(guó)內(nèi)冷的特點(diǎn)

Go語(yǔ)言目前所面臨的***問(wèn)題在于,還沒(méi)有足夠的經(jīng)驗(yàn)來(lái)證明GO是否真的是一個(gè)成功的產(chǎn)品,缺少足夠多超大型應(yīng)用的實(shí)踐。

 

責(zé)任編輯:龐桂玉 來(lái)源: 今日頭條
相關(guān)推薦

2022-03-02 09:49:14

Rust編程語(yǔ)言

2009-12-10 10:33:09

Go語(yǔ)言

2010-06-18 10:51:27

NetBeans 6.CSSEclipse

2011-12-05 10:33:49

QQ騰訊w808

2020-04-09 13:57:02

Swift可微分編程谷歌

2020-05-25 11:09:32

變量Java開(kāi)發(fā)

2012-05-16 17:22:14

Android手機(jī)

2010-01-11 09:38:28

編程語(yǔ)言排行榜Google Go

2011-01-05 10:58:05

Google Go

2012-11-08 09:36:10

Google Go

2021-05-28 05:34:06

Golang語(yǔ)言編程

2017-12-27 14:52:21

JSGo編程語(yǔ)言

2023-05-15 08:01:16

Go語(yǔ)言

2017-01-09 11:28:31

編程語(yǔ)言排行榜

2009-12-25 09:27:08

Google Go系統(tǒng)編程C語(yǔ)言

2022-09-19 00:29:01

編程語(yǔ)言Go 語(yǔ)言功能

2009-09-11 09:36:53

李開(kāi)復(fù)

2019-02-11 08:32:22

編程語(yǔ)言Go

2022-06-25 21:22:30

編程Rust代碼

2021-04-16 20:40:56

JVM內(nèi)存工具
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)