你知道GO語(yǔ)言的關(guān)鍵特性嗎?
馬哥教育今天就給大家講一下go語(yǔ)言的關(guān)鍵特性,GO語(yǔ)言之所以厲害,是因?yàn)樗诜?wù)端的開(kāi)發(fā)中,總能抓住程序員的痛點(diǎn),以最直接、簡(jiǎn)單、高效、穩(wěn)定的方式來(lái)解決問(wèn)題。這里我們并不會(huì)深入討論GO語(yǔ)言的具體語(yǔ)法,只會(huì)將語(yǔ)言中關(guān)鍵的、對(duì)簡(jiǎn)化編程具有重要意義的方面介紹給大家,跟隨大師們的腳步,體驗(yàn)GO的設(shè)計(jì)哲學(xué)。想要學(xué)習(xí)go語(yǔ)言和go語(yǔ)言入門(mén)的小伙伴就要好好看看了。
GO語(yǔ)言的關(guān)鍵特性主要包括以下幾方面:
- 并發(fā)與協(xié)程
- 基于消息傳遞的通信方式
- 豐富實(shí)用的內(nèi)置數(shù)據(jù)類型
- 函數(shù)多返回值
- defer機(jī)制
- 反射(reflect)
- 高性能HTTP Server
- 工程管理
- 編程規(guī)范

在當(dāng)今這個(gè)多核時(shí)代,并發(fā)編程的意義不言而喻。當(dāng)然,很多語(yǔ)言都支持多線程、多進(jìn)程編程,但遺憾的是,實(shí)現(xiàn)和控制起來(lái)并不是那么令人感覺(jué)輕松和愉悅。Golang不同的是,語(yǔ)言級(jí)別支持協(xié)程(goroutine)并發(fā)(協(xié)程又稱微線程,比線程更輕量、開(kāi)銷更小,性能更高),操作起來(lái)非常簡(jiǎn)單,語(yǔ)言級(jí)別提供關(guān)鍵字(go)用于啟動(dòng)協(xié)程,并且在同一臺(tái)機(jī)器上可以啟動(dòng)成千上萬(wàn)個(gè)協(xié)程。
對(duì)比JAVA的多線程和GO的協(xié)程實(shí)現(xiàn),明顯更直接、簡(jiǎn)單。這就是GO的魅力所在,以簡(jiǎn)單、高效的方式解決問(wèn)題,關(guān)鍵字go,或許就是GO語(yǔ)言最重要的標(biāo)志。
基于消息傳遞的通信方式

在異步的并發(fā)編程過(guò)程中,只能方便、快速的啟動(dòng)協(xié)程還不夠。協(xié)程之間的消息通信,也是非常重要的一環(huán),否則,各個(gè)協(xié)程就會(huì)成為脫韁的野馬而無(wú)法控制。在GO語(yǔ)言中,使用基于消息傳遞的通信方式(而不是大多數(shù)語(yǔ)言所使用的基于共享內(nèi)存的通信方式)進(jìn)行協(xié)程間通信,并且將消息管道(channel)作為基本的數(shù)據(jù)類型,使用類型關(guān)鍵字(chan)進(jìn)行定義,并發(fā)操作時(shí)線程安全。這點(diǎn)在語(yǔ)言的實(shí)現(xiàn)上,也具有革命性??梢?jiàn),GO語(yǔ)言本身并非簡(jiǎn)單得沒(méi)有底線,恰恰他們會(huì)將最實(shí)用、最有利于解決問(wèn)題的能力,以最簡(jiǎn)單、直接的形式提供給用戶。
Channel并不僅僅只是用于簡(jiǎn)單的消息通信,還可以引申出很多非常實(shí)用,而實(shí)現(xiàn)起來(lái)又非常方便的功能。比如,實(shí)現(xiàn)TCP連接池、限流等等,而這些在其它語(yǔ)言中實(shí)現(xiàn)起來(lái)并不輕松,但GO語(yǔ)言可以輕易做到。

GO語(yǔ)言作為編譯型語(yǔ)言,在數(shù)據(jù)類型上也支持得非常全面,除了傳統(tǒng)的整型、浮點(diǎn)型、字符型、數(shù)組、結(jié)構(gòu)等類型外。從實(shí)用性上考慮,也對(duì)字符串類型、切片類型(可變長(zhǎng)數(shù)組)、字典類型、復(fù)數(shù)類型、錯(cuò)誤類型、管道類型、甚至任意類型(Interface{})進(jìn)行了原生支持,并且用起來(lái)非常方便。比如字符串、切片類型,操作簡(jiǎn)便性幾乎和Python類似。
另外,將錯(cuò)誤類型(error)作為基本的數(shù)據(jù)類型,并且在語(yǔ)言級(jí)別不再支持try…catch的用法,這應(yīng)該算是一個(gè)非常大膽的革命性創(chuàng)舉,也難怪很多人吐槽GO語(yǔ)言不倫不類。但是跳出傳統(tǒng)的觀念,GO的開(kāi)發(fā)者認(rèn)為在編程過(guò)程中,要保證程序的健壯性和穩(wěn)定性,對(duì)異常的精確化處理是非常重要的,只有在每一個(gè)邏輯處理完成后,明確的告知上層調(diào)用,是否有異常,并由上層調(diào)用明確、及時(shí)的對(duì)異常進(jìn)行處理,這樣才可以高程度的保證程序的健壯性和穩(wěn)定性。雖然這樣做會(huì)在編程過(guò)程中出現(xiàn)大量的對(duì)error結(jié)果的判斷,但是這無(wú)疑也增強(qiáng)了開(kāi)發(fā)者對(duì)異常處理的警惕度。而實(shí)踐證明,只要嚴(yán)格按GO推薦的風(fēng)格編碼,想寫(xiě)出不健壯的代碼,都很難。當(dāng)然,前提是你不排斥它,認(rèn)可它。

在語(yǔ)言中支持函數(shù)多返回值,并不是什么新鮮事,Python就是其中之一。允許函數(shù)返回多個(gè)值,在某些場(chǎng)景下,可以有效的簡(jiǎn)化編程。GO語(yǔ)言推薦的編程風(fēng)格,是函數(shù)返回的最后一個(gè)參數(shù)為error類型(只要邏輯體中可能出現(xiàn)異常),這樣,在語(yǔ)言級(jí)別支持多返回值,就很有必要了。
以上就是小編為大家講的go語(yǔ)言的關(guān)鍵性,想了解和學(xué)習(xí)go語(yǔ)言的小伙伴可以關(guān)注馬哥教育官網(wǎng)。
聲明:文章來(lái)源于網(wǎng)絡(luò),侵刪!