1. 保留但大幅度簡(jiǎn)化指針
創(chuàng)新互聯(lián)公司是一家專(zhuān)業(yè)提供鐘樓企業(yè)網(wǎng)站建設(shè),專(zhuān)注與成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)、H5開(kāi)發(fā)、小程序制作等業(yè)務(wù)。10年已為鐘樓眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專(zhuān)業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。
Go語(yǔ)言保留著C中值和指針的區(qū)別,但是對(duì)于指針?lè)爆嵱梅ㄟM(jìn)行了大量的簡(jiǎn)化,引入引用的概念。所以在Go語(yǔ)言中,你幾乎不用擔(dān)心會(huì)因?yàn)橹苯硬僮鲀?nèi)寸而引起各式各樣的錯(cuò)誤。
2. 多參數(shù)返回
還記得在C里面為了回饋多個(gè)參數(shù),不得不開(kāi)辟幾段指針傳到目標(biāo)函數(shù)中讓其操作么?在Go里面這是完全不必要的。而且多參數(shù)的支持讓Go無(wú)需使用繁瑣的exceptions體系,一個(gè)函數(shù)可以返回期待的返回值加上error,調(diào)用函數(shù)后立刻處理錯(cuò)誤信息,清晰明了。
3. Array,slice,map等內(nèi)置基本數(shù)據(jù)結(jié)構(gòu)
如果你習(xí)慣了Python中簡(jiǎn)潔的list和dict操作,在Go語(yǔ)言中,你不會(huì)感到孤單。一切都是那么熟悉,而且更加高效。如果你是C++程序員,你會(huì)發(fā)現(xiàn)你又找到了STL的vector 和 map這對(duì)朋友。
4. Interface
Go語(yǔ)言最讓人贊嘆不易的特性,就是interface的設(shè)計(jì)。任何數(shù)據(jù)結(jié)構(gòu),只要實(shí)現(xiàn)了interface所定義的函數(shù),自動(dòng)就implement了這個(gè)interface,沒(méi)有像Java那樣冗長(zhǎng)的class申明,提供了靈活太多的設(shè)計(jì)度和OO抽象度,讓你的代碼也非常干凈。千萬(wàn)不要以為你習(xí)慣了Java那種一條耐納塌一條加implements的方式,感覺(jué)還行,等接口的設(shè)計(jì)越來(lái)越復(fù)雜的時(shí)候,無(wú)數(shù)Bug正在后面等著你。
同時(shí),正因?yàn)槿绱?,Go語(yǔ)言的interface可以用來(lái)表示任何generic的東西,比如一個(gè)空的interface,可以是string可以是int,可以是任何數(shù)據(jù)類(lèi)型,因?yàn)檫@些數(shù)據(jù)類(lèi)型都不需要實(shí)現(xiàn)任何函數(shù),自然就滿(mǎn)足空interface的定義了。加上Go語(yǔ)言的type assertion,可以提供一般動(dòng)態(tài)語(yǔ)言才有的duck typing特性, 而仍然能在compile中捕捉明顯的錯(cuò)誤。
5. OO
Go語(yǔ)言本質(zhì)上不是面向?qū)ο笳Z(yǔ)言,它還是過(guò)程化的。但是,在Go語(yǔ)言中, 你可以很輕易的做大部分你在別的OO語(yǔ)言中能做的事,用更簡(jiǎn)單清晰的邏輯。是的,在這里,不需要class,仍然可以繼承,仍然可以多態(tài),但是速度卻快得多。因?yàn)楸举|(zhì)上,OO在Go語(yǔ)言中,就是普通的struct操作。
6. Goroutine
這個(gè)幾乎算是Go語(yǔ)言的招牌特性之一了,我也不想多提。如果你完全不了解Goroutine,那么你只需要知道,這玩意是超級(jí)輕量級(jí)的類(lèi)似線程的昌圓東西,但通過(guò)它,你不需要復(fù)雜的線程操作鎖操作,不需要care調(diào)度,就能玩轉(zhuǎn)基本的并行程序。在Go語(yǔ)言里,觸發(fā)一個(gè)routine和erlang spawn一樣簡(jiǎn)單?;旧弦莆誈o語(yǔ)言,以Goroutine和channel為核心的內(nèi)存模型是必須要懂的。不過(guò)請(qǐng)放心,真的非常簡(jiǎn)單。
7. 更多現(xiàn)代的特性
和C比較,Go語(yǔ)言完全就是一門(mén)現(xiàn)代化語(yǔ)言,原生支持的Unicode, garbage collection, Closures(是的,和functional programming language類(lèi)似), function是first class object,等等等等。
看到這里,你可能會(huì)發(fā)現(xiàn),我用了很多輕易,簡(jiǎn)單,快速之類(lèi)的形容詞來(lái)形容Go語(yǔ)言的特點(diǎn)。我想說(shuō)的是,一點(diǎn)都不夸張,連Go語(yǔ)言的入門(mén)學(xué)習(xí)到提高,都比別的語(yǔ)言門(mén)檻低太多太多。在大部分人都有C的背景的時(shí)代,對(duì)于Go語(yǔ)言,從入門(mén)到能夠上手做項(xiàng)目,最多不過(guò)半個(gè)月。Go語(yǔ)言給人的感覺(jué)就是太直接了,什么都直接,讀源代碼直接,寫(xiě)自己茄亮的代碼也直接。
Go和java產(chǎn)生的背景和語(yǔ)言的定義不一樣,比較他們的好壞沒(méi)多大意義,適合就是最好的,當(dāng)你去做一個(gè)大型的項(xiàng)目的時(shí)候,使用java能夠更清晰地展示出你的業(yè)務(wù)。自身提供了喊蘆比較完善的庫(kù)。
Go語(yǔ)言也有面向函數(shù)和面向?qū)ο蟮淖兂煞桨?,其自身的性配察能決定了go語(yǔ)言更適合做中間件,底層的各種框架。
語(yǔ)言對(duì)企業(yè)來(lái)說(shuō),是制造生產(chǎn)力的,哪種語(yǔ)言能夠給我們帶來(lái)更好的收益,我們培滲茄才選擇它們。
不會(huì)的。生態(tài)無(wú)從建立。。。有五種以生態(tài)為核心的語(yǔ)言。。。C,C++,C#,JAVA,Python,你有沒(méi)有想過(guò)這五門(mén)語(yǔ)言為什么是主流?
是由于語(yǔ)法好嗎?如果這么認(rèn)為,那就太可笑了。是因?yàn)樗鼈儞碛凶约旱纳鷳B(tài)圈。
我舉三個(gè)例子。
C語(yǔ)言是單片機(jī)的標(biāo)準(zhǔn)開(kāi)發(fā)語(yǔ)言,你家里用的電視,冰箱,洗衣機(jī),空調(diào),里面的主控芯片,全都是用C語(yǔ)言編寫(xiě)的。由于偏底層,即便它空出位置來(lái),Go也是勝任不了的,能替代它的只有匯編語(yǔ)言。
C#,啟慎褲你覺(jué)得它用的悄簡(jiǎn)并不多?那就大錯(cuò)特錯(cuò)了,它的生態(tài)圈無(wú)比巨大,很多人只知道它是微軟的官方開(kāi)發(fā)語(yǔ)言,Windows上的霸主。但卻常常被忽略的一點(diǎn)是,它還是唯一可以同時(shí)開(kāi)發(fā)安卓和IOS的語(yǔ)言。有超過(guò)一半的3D手游都是用它寫(xiě)的,比如《王者榮耀》。不僅如此,它還是云計(jì)算,人工智能,混合現(xiàn)實(shí)的重要組成部分,微軟未來(lái)還有一大波項(xiàng)目等著它。而且兩年前升級(jí)到了.NET CORE版本之后,它的速度比GO更快。
Python,很多人以為它是新興語(yǔ)言,但其實(shí)它從80年代就出現(xiàn)了。也是個(gè)老古董了。為什么孝旦這么多年都沒(méi)火,最近幾年卻突然火了?并不是因?yàn)樗旧?,而是因?yàn)長(zhǎng)inux火了。Linux為什么火?因?yàn)榍度胧剑驗(yàn)槲锫?lián)網(wǎng)。
GO是谷歌的親兒子沒(méi)錯(cuò),但谷歌為GO準(zhǔn)備了啥生態(tài)?在安卓上的重要性,咱都不好意思說(shuō)跟JAVA比,太遙遠(yuǎn)。。。跟C#能比嗎?
在谷歌的平臺(tái)尚且如此,你還指望啥?