免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

go語(yǔ)言的最重要特性有哪些

本文小編為大家詳細(xì)介紹“go語(yǔ)言的最重要特性有哪些”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“go語(yǔ)言的最重要特性有哪些”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。

成都創(chuàng)新互聯(lián)專(zhuān)業(yè)為企業(yè)提供玉泉街道網(wǎng)站建設(shè)、玉泉街道做網(wǎng)站、玉泉街道網(wǎng)站設(shè)計(jì)、玉泉街道網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、玉泉街道企業(yè)網(wǎng)站模板建站服務(wù),10余年玉泉街道做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

go語(yǔ)言最重要特性是:1、并發(fā)編程;go語(yǔ)法上的并發(fā)編程極為容易,無(wú)須處理回調(diào),無(wú)須關(guān)注線程切換,僅一個(gè)關(guān)鍵字,簡(jiǎn)單而自然。2、自動(dòng)回收垃圾;程序員不需要再考慮內(nèi)存的回收等,而是由語(yǔ)言特性提供垃圾回收器來(lái)回收內(nèi)存。3、更豐富的內(nèi)置類(lèi)型。4、函數(shù)的多返回值。5、錯(cuò)誤處理。6、匿名函數(shù)和閉包。7、類(lèi)型和接口。8、反射,可以讓開(kāi)發(fā)者將類(lèi)型本身作為第一類(lèi)的值類(lèi)型處理。9、語(yǔ)言交互性。

Go語(yǔ)言最重要的特征如下:

  • 并發(fā)編程

  • 自動(dòng)回收垃圾

  • 更豐富的內(nèi)置類(lèi)型

  • 函數(shù)的多返回值

  • 錯(cuò)誤處理

  • 匿名函數(shù)和閉包

  • 類(lèi)型和接口

  • 反射

  • 語(yǔ)言交互性

并發(fā)編程

時(shí)至今日,并發(fā)編程已成為程序員的基本技能,在各個(gè)技術(shù)社區(qū)都能看到諸多與之相關(guān)的討論主題。在這種情況下Go語(yǔ)言卻一反常態(tài)做了件極大膽的事,從根本上將一切都并發(fā)化,運(yùn)行時(shí)用 Goroutine 運(yùn)行所有的一切,包括 main.main 入口函數(shù)。

可以說(shuō),Goroutine 是 Go 最顯著的特征。它用類(lèi)協(xié)程的方式來(lái)處理并發(fā)單元,卻又在運(yùn)行時(shí)層面做了更深度的優(yōu)化處理。這使得語(yǔ)法上的并發(fā)編程變得極為容易,無(wú)須處理回調(diào),無(wú)須關(guān)注線程切換,僅一個(gè)關(guān)鍵字,簡(jiǎn)單而自然。

Go語(yǔ)言在并發(fā)編程方面比絕大多數(shù)語(yǔ)言要簡(jiǎn)潔不少,這一點(diǎn)是其最大亮點(diǎn)之一,也是其在未來(lái)進(jìn)入高并發(fā)高性能場(chǎng)景的重要籌碼。

go語(yǔ)言的最重要特性有哪些

不同于傳統(tǒng)的多進(jìn)程或多線程,golang的并發(fā)執(zhí)行單元是一種稱(chēng)為goroutine的協(xié)程。

由于在共享數(shù)據(jù)場(chǎng)景中會(huì)用到鎖,再加上GC,其并發(fā)性能有時(shí)不如異步復(fù)用IO模型,因此相對(duì)于大多數(shù)語(yǔ)言來(lái)說(shuō),golang的并發(fā)編程簡(jiǎn)單比并發(fā)性能更具賣(mài)點(diǎn)。

在當(dāng)今這個(gè)多核時(shí)代,并發(fā)編程的意義不言而喻。當(dāng)然,很多語(yǔ)言都支持多線程、多進(jìn)程編程,但遺憾的是,實(shí)現(xiàn)和控制起來(lái)并不是那么令人感覺(jué)輕松和愉悅。Golang不同的是,語(yǔ)言級(jí)別支持協(xié)程(goroutine)并發(fā)(協(xié)程又稱(chēng)微線程,比線程更輕量、開(kāi)銷(xiāo)更小,性能更高),操作起來(lái)非常簡(jiǎn)單,語(yǔ)言級(jí)別提供關(guān)鍵字(go)用于啟動(dòng)協(xié)程,并且在同一臺(tái)機(jī)器上可以啟動(dòng)成千上萬(wàn)個(gè)協(xié)程。協(xié)程經(jīng)常被理解為輕量級(jí)線程,一個(gè)線程可以包含多個(gè)協(xié)程,共享堆不共享?xiàng)!f(xié)程間一般由應(yīng)用程序顯式實(shí)現(xiàn)調(diào)度,上下文切換無(wú)需下到內(nèi)核層,高效不少。協(xié)程間一般不做同步通訊,而golang中實(shí)現(xiàn)協(xié)程間通訊有兩種:1)共享內(nèi)存型,即使用全局變量+mutex鎖來(lái)實(shí)現(xiàn)數(shù)據(jù)共享;2)消息傳遞型,即使用一種獨(dú)有的channel機(jī)制進(jìn)行異步通訊。

對(duì)比JAVA的多線程和GO的協(xié)程實(shí)現(xiàn),明顯更直接、簡(jiǎn)單。這就是GO的魅力所在,以簡(jiǎn)單、高效的方式解決問(wèn)題,關(guān)鍵字go,或許就是GO語(yǔ)言最重要的標(biāo)志。

高并發(fā)是Golang語(yǔ)言最大的亮點(diǎn)

內(nèi)存回收(GC)

從C到C++,從程序性能的角度來(lái)考慮,這兩種語(yǔ)言允許程序員自己管理內(nèi)存,包括內(nèi)存的申請(qǐng)和釋放等。因?yàn)闆](méi)有垃圾回收機(jī)制所以C/C++運(yùn)行起來(lái)速度很快,但是隨著而來(lái)的是程序員對(duì)內(nèi)存使用上的很謹(jǐn)小慎微的考慮。因?yàn)槟呐乱稽c(diǎn)不小心就可能會(huì)導(dǎo)致“內(nèi)存泄露”使得資源浪費(fèi)或者“野指針”使得程序崩潰等,盡管C++11后來(lái)使用了智能指針的概念,但是程序員仍然需要很小心的使用。后來(lái)為了提高程序開(kāi)發(fā)的速度以及程序的健壯性,java和C#等高級(jí)語(yǔ)言引入了GC機(jī)制,即程序員不需要再考慮內(nèi)存的回收等,而是由語(yǔ)言特性提供垃圾回收器來(lái)回收內(nèi)存。但是隨之而來(lái)的可能是程序運(yùn)行效率的降低。

GC過(guò)程是:先stop the world,掃描所有對(duì)象判活,把可回收對(duì)象在一段bitmap區(qū)中標(biāo)記下來(lái),接著立即start the world,恢復(fù)服務(wù),同時(shí)起一個(gè)專(zhuān)門(mén)gorountine回收內(nèi)存到空閑list中以備復(fù)用,不物理釋放。物理釋放由專(zhuān)門(mén)線程定期來(lái)執(zhí)行。

GC瓶頸在于每次都要掃描所有對(duì)象來(lái)判活,待收集的對(duì)象數(shù)目越多,速度越慢。一個(gè)經(jīng)驗(yàn)值是掃描10w個(gè)對(duì)象需要花費(fèi)1ms,所以盡量使用對(duì)象少的方案,比如我們同時(shí)考慮鏈表、map、slice、數(shù)組來(lái)進(jìn)行存儲(chǔ),鏈表和map每個(gè)元素都是一個(gè)對(duì)象,而slice或數(shù)組是一個(gè)對(duì)象,因此slice或數(shù)組有利于GC。

GC性能可能隨著版本不斷更新會(huì)不斷優(yōu)化,這塊沒(méi)仔細(xì)調(diào)研,團(tuán)隊(duì)中有HotSpot開(kāi)發(fā)者,應(yīng)該會(huì)借鑒jvm gc的設(shè)計(jì)思想,比如分代回收、safepoint等。

  • 內(nèi)存自動(dòng)回收,再也不需要開(kāi)發(fā)人員管理內(nèi)存

  • 開(kāi)發(fā)人員專(zhuān)注業(yè)務(wù)實(shí)現(xiàn),降低了心智負(fù)擔(dān)

  • 只需要new分配內(nèi)存,不需要釋放

更豐富的內(nèi)置類(lèi)型

關(guān)鍵在于內(nèi)置,像map、slice這些常用的數(shù)據(jù)類(lèi)型,內(nèi)置于builtin,默認(rèn)包含,無(wú)需自己添加。

函數(shù)多返回值

在C,C++中,包括其他的一些高級(jí)語(yǔ)言是不支持多個(gè)函數(shù)返回值的。但是這項(xiàng)功能又確實(shí)是需要的,所以在C語(yǔ)言中一般通過(guò)將返回值定義成一個(gè)結(jié)構(gòu)體,或者通過(guò)函數(shù)的參數(shù)引用的形式進(jìn)行返回。而在Go語(yǔ)言中,作為一種新型的語(yǔ)言,目標(biāo)定位為強(qiáng)大的語(yǔ)言當(dāng)然不能放棄對(duì)這一需求的滿足,所以支持函數(shù)多返回值是必須的。

函數(shù)定義時(shí)可以在入?yún)⒑竺嬖偌?a,b,c),表示將有3個(gè)返回值a、b、c。這個(gè)特性在很多語(yǔ)言都有,比如python。

這個(gè)語(yǔ)法糖特性是有現(xiàn)實(shí)意義的,比如我們經(jīng)常會(huì)要求接口返回一個(gè)三元組(errno,errmsg,data),在大多數(shù)只允許一個(gè)返回值的語(yǔ)言中,我們只能將三元組放入一個(gè)map或數(shù)組中返回,接收方還要寫(xiě)代碼來(lái)檢查返回值中包含了三元組,如果允許多返回值,則直接在函數(shù)定義層面上就做了強(qiáng)制,使代碼更簡(jiǎn)潔安全。

語(yǔ)言交互性

語(yǔ)言交互性指的是本語(yǔ)言是否能和其他語(yǔ)言交互,比如可以調(diào)用其他語(yǔ)言編譯的庫(kù)。

在Go語(yǔ)言中直接重用了大部份的C模塊,這里稱(chēng)為Cgo.Cgo允許開(kāi)發(fā)者混合編寫(xiě)C語(yǔ)言代碼,然后Cgo工具可以將這些混合的C代碼提取并生成對(duì)于C功能的調(diào)用包裝代碼。開(kāi)發(fā)者基本上可以完全忽略這個(gè)Go語(yǔ)言和C語(yǔ)言的邊界是如何跨越的。

golang可以和C程序交互,但不能和C++交互。可以有兩種替代方案:1)先將c++編譯成動(dòng)態(tài)庫(kù),再由go調(diào)用一段c代碼,c代碼通過(guò)dlfcn庫(kù)動(dòng)態(tài)調(diào)用動(dòng)態(tài)庫(kù)(記得export LD_LIBRARY_PATH);2)使用swig(沒(méi)玩過(guò))

異常處理

golang不支持try…catch這樣的結(jié)構(gòu)化的異常解決方式,因?yàn)橛X(jué)得會(huì)增加代碼量,且會(huì)被濫用,不管多小的異常都拋出。golang提倡的異常處理方式是:

普通異常:被調(diào)用方返回error對(duì)象,調(diào)用方判斷error對(duì)象。

嚴(yán)重異常:指的是中斷性panic(比如除0),使用defer…recover…panic機(jī)制來(lái)捕獲處理。嚴(yán)重異常一般由golang內(nèi)部自動(dòng)拋出,不需要用戶主動(dòng)拋出,避免傳統(tǒng)try…catch寫(xiě)得到處都是的情況。當(dāng)然,用戶也可以使用panic('xxxx')主動(dòng)拋出,只是這樣就使這一套機(jī)制退化成結(jié)構(gòu)化異常機(jī)制了。

反射(reflection)

Go語(yǔ)言提供了一種機(jī)制在運(yùn)行時(shí)更新和檢查變量的值、調(diào)用變量的方法和變量支持的內(nèi)在操作,但是在編譯時(shí)并不知道這些變量的具體類(lèi)型,這種機(jī)制被稱(chēng)為反射。反射也可以讓我們將類(lèi)型本身作為第一類(lèi)的值類(lèi)型處理。

反射是指在程序運(yùn)行期對(duì)程序本身進(jìn)行訪問(wèn)和修改的能力,程序在編譯時(shí)變量被轉(zhuǎn)換為內(nèi)存地址,變量名不會(huì)被編譯器寫(xiě)入到可執(zhí)行部分,在運(yùn)行程序時(shí)程序無(wú)法獲取自身的信息。

支持反射的語(yǔ)言可以在程序編譯期將變量的反射信息,如字段名稱(chēng)、類(lèi)型信息、結(jié)構(gòu)體信息等整合到可執(zhí)行文件中,并給程序提供接口訪問(wèn)反射信息,這樣就可以在程序運(yùn)行期獲取類(lèi)型的反射信息,并且有能力修改它們。

C/C++語(yǔ)言沒(méi)有支持反射功能,只能通過(guò) typeid 提供非常弱化的程序運(yùn)行時(shí)類(lèi)型信息;Java、C# 等語(yǔ)言都支持完整的反射功能;Lua、JavaScript 類(lèi)動(dòng)態(tài)語(yǔ)言,由于其本身的語(yǔ)法特性就可以讓代碼在運(yùn)行期訪問(wèn)程序自身的值和類(lèi)型信息,因此不需要反射系統(tǒng)。

Go語(yǔ)言程序的反射系統(tǒng)無(wú)法獲取到一個(gè)可執(zhí)行文件空間中或者是一個(gè)包中的所有類(lèi)型信息,需要配合使用標(biāo)準(zhǔn)庫(kù)中對(duì)應(yīng)的詞法、語(yǔ)法解析器和抽象語(yǔ)法樹(shù)(AST)對(duì)源碼進(jìn)行掃描后獲得這些信息。

讀到這里,這篇“go語(yǔ)言的最重要特性有哪些”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

分享標(biāo)題:go語(yǔ)言的最重要特性有哪些
文章分享:http://m.newbst.com/article38/pdsgpp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站網(wǎng)站收錄Google自適應(yīng)網(wǎng)站小程序開(kāi)發(fā)外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)