Golang 介紹
更多內(nèi)容可參考:http://blog.hyrscloud.com/topic/index?id=17
背景:golang語(yǔ)言的發(fā)起主要是為了解決C++中出現(xiàn)的問(wèn)題。傳統(tǒng)的語(yǔ)言比如c++,大家花費(fèi)太多時(shí)間來(lái)學(xué)習(xí)如何使用,而不是如何更好的表達(dá)寫程序員的思想,同時(shí)編譯的時(shí)間太長(zhǎng),對(duì)于編寫-編譯-運(yùn)行這個(gè)鏈條來(lái)說(shuō)周期太長(zhǎng)。動(dòng)態(tài)語(yǔ)言如Python,由于沒(méi)有強(qiáng)類型的約束,很多問(wèn)題需要在運(yùn)行時(shí)發(fā)現(xiàn),這種低級(jí)錯(cuò)誤更應(yīng)該交給編譯器來(lái)發(fā)現(xiàn)。同時(shí)有如下趨勢(shì):人力成本越來(lái)越高、機(jī)器越來(lái)越便宜、性能越來(lái)越厲害、在開(kāi)發(fā)效率和運(yùn)行速度上達(dá)到平衡,這是golang誕生的背景。
Go的思維方式:最小心智負(fù)擔(dān)原則、最小特性、最少驚異、最少犯錯(cuò)機(jī)會(huì)。
Go的目標(biāo)是成為互聯(lián)網(wǎng)的c語(yǔ)言,在保持了c簡(jiǎn)單明了的基礎(chǔ)上,同時(shí)加入了一些自己的特性:少就是指數(shù)級(jí)的多、最少特性原則(如果一個(gè)功能不對(duì)解決任何問(wèn)題有顯著價(jià)值,那么就不提供)、顯式表達(dá)(所寫即所得)、極度簡(jiǎn)化但完備的OOP(面向?qū)ο缶幊蹋?、功能?nèi)聚、友善的C語(yǔ)言支持;
Go 語(yǔ)言是谷歌2009發(fā)布的第二款開(kāi)源編程語(yǔ)言。
Go 語(yǔ)言專門針對(duì) 多處理器系統(tǒng) 應(yīng)用程序的編程進(jìn)行了優(yōu)化,使用 Go 編譯的程序可以媲美 C 或 C++ 代碼的速度,而且更加安全、支持并行進(jìn)程。
Google 對(duì) Go 寄予厚望。其設(shè)計(jì)是讓軟件充分發(fā)揮多核心處理器同步多工的優(yōu)點(diǎn),并可解決面向?qū)ο蟪绦蛟O(shè)計(jì)的麻煩。
-
以軟件工程為目的的語(yǔ)言設(shè)計(jì)
快速編譯,使用了更加智能的編譯器,并簡(jiǎn)化了解決依賴的算法,最終提供了更快的編譯速度。
嚴(yán)格的依賴管理(沒(méi)有依賴地獄,甚至是glibc)、代碼風(fēng)格的強(qiáng)一致性、偏向組合而不是繼承;
編譯一次,隨處拷貝,部署極為方便;
交叉編譯只是一個(gè)環(huán)境變量的問(wèn)題;
-
Go對(duì)OOP(Object Oriented Programming面向?qū)ο螅┑闹С钟腥缦绿攸c(diǎn)
返璞歸真,沒(méi)有繼承,只有組合;
明確區(qū)分復(fù)用和抽象,復(fù)用使用組合,抽象使用;
所見(jiàn)即所得,明確的內(nèi)存模型,沒(méi)有vtable之類的東西;
鴨子類型,抽象更方面(鴨子類型是動(dòng)態(tài)類型和某些靜態(tài)語(yǔ)言的一種對(duì)象推斷風(fēng)格)
-
Go對(duì)并發(fā)的支持是一個(gè)重要的特性,go有兩大神器來(lái)支持并發(fā)
go routine:輕量的”線程“;
channel:帶類型的,協(xié)程安全的管道,類似unix里面的pipe;
內(nèi)存管理:有專門的垃圾回收機(jī)制
Go語(yǔ)言的類型系統(tǒng)(接口):Go 語(yǔ)言提供了靈活的、無(wú)繼承的類型系統(tǒng),無(wú)需降低運(yùn)行性能就能最大程度上復(fù)用代碼。
Go最主要的特性:
自動(dòng)垃圾回收
更豐富的內(nèi)置類型
函數(shù)多返回值
錯(cuò)誤處理
匿名函數(shù)和閉包
類型和接口
并發(fā)編程
反射
語(yǔ)言交互性
Go的領(lǐng)域應(yīng)用
Docker,正火熱的容器化技術(shù)。
kubernetes,Goole Borg的開(kāi)源實(shí)現(xiàn)。
Etcd, 類似zookeeper的高可用key-value存儲(chǔ)。
TIDB, 國(guó)人開(kāi)發(fā)的Google spanner的開(kāi)源實(shí)現(xiàn)。
在區(qū)塊鏈領(lǐng)域,真正的首選語(yǔ)言是 Go 語(yǔ)言,以太坊都是基于 Go 語(yǔ)言開(kāi)發(fā)的。
由于golang編程簡(jiǎn)單,編譯速度快,非常適合游戲服務(wù)器開(kāi)發(fā)。
Golang 以其在高并發(fā)場(chǎng)景下的天然優(yōu)勢(shì)等特性,已經(jīng)成為今天開(kāi)發(fā)分布式系統(tǒng)的首選語(yǔ)言,在云計(jì)算領(lǐng)域占據(jù)了無(wú)法替代的位置,docker就是golang開(kāi)發(fā)的。