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