谷歌日前將自家的Go語言升級(jí)到了1.3正式版,新版本主要是更新了更精確的垃圾回收機(jī)制,解決了GC回收的問題。不過新版本開始也不再支持Windows2000,支持了Native Client虛擬機(jī)架構(gòu)。
Google開放Go的代碼,希望籍此幫助Go語言的發(fā)展。首席軟件工程師Rob Pike說:我們開發(fā)Go,是因?yàn)榻?0年左右開發(fā)程序之難讓我們有點(diǎn)沮喪。Google兩年前開始開發(fā)Go,1年前開始有一只團(tuán)隊(duì)專職于此。Go的定位是系統(tǒng)編程,比如Web服務(wù)器、存儲(chǔ)系統(tǒng)和數(shù)據(jù)庫(kù)等,但也歡迎在其它方面的應(yīng)用。"
Go語言特點(diǎn)簡(jiǎn)介:
1.引入輕量級(jí)線程——協(xié)程(coroutine),Go語言中叫g(shù)oroutine。
2.采用Erlang風(fēng)格的并發(fā)模型,即消息是進(jìn)程間唯一的通信方式(而非共享內(nèi)存)。兩個(gè)goroutine之間通信通過channel(通道)進(jìn)行。
3.對(duì)代碼風(fēng)格進(jìn)行了強(qiáng)制統(tǒng)一,比如public變量必須以大寫字母開頭,private變量必須以小寫字母開頭,從而省略了這兩個(gè)關(guān)鍵字。{}中{的書寫不能另起一行等。
4.defer關(guān)鍵字,不管程序是否異常,均在退出時(shí)執(zhí)行的代碼。避免了大量try、catch語句。
5.函數(shù)允許返回多個(gè)值,且最后一個(gè)值問error類型,用于在錯(cuò)誤的情況下返回詳細(xì)信息。
6.反對(duì)(不提供)函數(shù)和操作符的重載,不提供繼承、虛函數(shù)、虛函數(shù)重載。但是提供組合,也達(dá)到繼承的目的。
7.沒有構(gòu)造函數(shù)和析構(gòu)函數(shù) ,提供接口,與其他語言最大的區(qū)別在于接口是非侵入性的。即實(shí)現(xiàn)類無需從接口派生
8.支持匿名函數(shù)與閉包。
為什么應(yīng)該用Go?
Go是為了幫助人們閱讀、調(diào)試和維護(hù)大型軟件系統(tǒng)而生的,所以目標(biāo)是
不再緩慢
不再笨拙
提高效率
保持(甚至提升)擴(kuò)展性
但是在使用C++或者Java開發(fā)中卻常常遇到各種問題:
構(gòu)建緩慢
依賴性難以控制
每個(gè)編程語言都使用不同的語言子集
程序難以理解(文檔等原因)
重復(fù)工作
更新成本高
版本交叉
自動(dòng)化不方便(工具問題)
跨語言構(gòu)建
而Go語言則是為了解決這些問題而設(shè)計(jì)的。
另外,C語言的依賴一直是個(gè)大問題,包括依賴疊加、編譯時(shí)引入依賴的情況都很難處理,同時(shí)你也沒辦法查清哪些依賴是可以刪除的,那些不可以。在C++中,這一點(diǎn)變得更加明顯:
每個(gè)類里都有#include文件
#include文件中有代碼(而不僅僅是聲明)
#ifndef的殘留
所以一直無法在一臺(tái)機(jī)器上構(gòu)建大型Google二進(jìn)制。(To build a large Google binary on a single computer is impractical.)
當(dāng)然,工具確實(shí)很有幫助,于是做了如下改進(jìn):
新的分布式構(gòu)建系統(tǒng)
不再需要Makefile(但仍然使用BUILD文件)
多緩存
多復(fù)雜度(大程序本身所具有的)
即使在Google的分布式構(gòu)建系統(tǒng)的的幫助下,大型構(gòu)建工程依然會(huì)花費(fèi)不少時(shí)間(以其中一個(gè)二進(jìn)制文件為例,在2007年花了45分鐘,現(xiàn)在是27分鐘)。生活質(zhì)量還是太低。
更新日志:
今天Go 團(tuán)隊(duì)很高興地宣布Go 1.8發(fā)布了,F(xiàn)已提供下載。整個(gè)標(biāo)準(zhǔn)庫(kù)有了顯著的性能提升和變化。該版本主要的更新內(nèi)容如下:
Go 1.7中為64位x86引入的編譯器后端現(xiàn)在用于所有體系結(jié)構(gòu),這些體系結(jié)構(gòu)將會(huì)有顯著的性能改進(jìn)。例如,我們的基準(zhǔn)程序所需的CPU時(shí)間在32位ARM系統(tǒng)上減少了20-30%。在此版本中,64位x86系統(tǒng)還有一些性能改進(jìn),編譯器和鏈接器更快了,編譯時(shí)間應(yīng)該比Go 1.7提高約15%。但是在這一領(lǐng)域還有很長(zhǎng)的路要走:我們希望在未來版本中實(shí)現(xiàn)更快的編譯速度。
垃圾收集暫停時(shí)間明顯更短,通常在100微秒以下,有時(shí)候甚至低至10微秒。
HTTP服務(wù)器添加對(duì) HTTP/2 Push的支持,允許服務(wù)器搶先發(fā)送響應(yīng)到客戶端。這對(duì)于通過消除往返行程來最小化網(wǎng)絡(luò)延遲非常有用。HTTP服務(wù)器現(xiàn)在還支持正常關(guān)機(jī)了,允許服務(wù)器通過在服務(wù)所有正在運(yùn)行的請(qǐng)求之后關(guān)閉,而最小化停機(jī)時(shí)間。
上下文(添加到Go 1.7中的標(biāo)準(zhǔn)庫(kù))提供了取消和超時(shí)機(jī)制。Go 1.8在標(biāo)準(zhǔn)庫(kù)中添加了更多對(duì)上下文的支持,包括數(shù)據(jù)庫(kù)/ sql和net包以及net / http包中的Server.Shutdown。
現(xiàn)在使用新添加的Slice函數(shù)在排序包中對(duì)切片進(jìn)行排序更簡(jiǎn)單。例如,要通過“名稱”字段對(duì)結(jié)構(gòu)體片段進(jìn)行排序: