Go1.6 和 Go語言聖經中文版 正式發佈!

Go1.6 和 Go語言聖經中文版 正式發佈!

Go1.6正式版本發佈。在 https://golang.org/doc/go1.6 能夠預覽Go1.6的發佈信息。自Go1.5發佈以來的重大變化有如下幾個:html

  • 《Go語言聖經》 面世標誌着Go語言將進入下一個快速發展階段。
  • 制定了Go語言和C語言之間的指針傳遞規範,深度cgo用戶能夠放心了。
  • Go1.6開始全面支持 HTTP/2 國際標準,感謝 @bradfitz 大神的努力。
  • 模板和反射包的改進,這部分我用的很少。
  • print/println/panic修復中文亂碼問題。
  • 標準庫中其它包的改進。

《Go語言聖經》

《Go語言聖經》(英文名:《The Go Programming Language》) 是由Go語言核心團隊成員 Alan A. A. DonovanK&R 中的 Brian W. Kernighan 操刀完成。幾乎大部分Go語言核心成員都參與了校對工做,該聖經介紹了Go幾乎所有特性,隨着語言的深刻層層遞進,而且解讀得很是細緻。其中比較能反映Go語言特點的是第七章接口和第八九章併發編程等章節,不過每一節內容都精彩不容錯過,是廣大Gopher的必讀書目。git

Go語言聖經的官網提供了英文版第一章的預覽,不過網上已經有完整的PDF版本能夠下載,你們能夠本身放狗去搜。須要私下交流的請轉QQ羣(531508541)。github

Go語言聖經

PS: 其中中文版只是爲了便於學習和交流,但願不要用於商業目的。golang

編譯器工具鏈

編譯器的語法分析部分所有采用手寫代碼實現,代替之前基於yacc工具實現的分析器。其中yacc將再也不是Go語言核心工具,可能會移動到外圍擴展包中。編程

Go1.5,已經對Linux和Mac OS X等平臺提供了靜態庫和動態庫的支持。Windows版本的DLL支持始終尚未到來,不過目前社區已經有人初步實現了該功能(Issue11058),指望Go1.7能合併進來。服務器

同時,Go1.6將默認啓動Go1.5引入的vendor特性支持。目前,能夠經過將GO15VENDOREXPERIMENT環境變量設置爲0來關閉它。不過在Go1.7以後將刪除GO15VENDOREXPERIMENT環境變量,vendor的支持將成爲常態。併發

LLDB將支持Go語音調試: http://ribrdb.github.io/lldb/ 。另外,微軟的VSCode也開始提供插件支持Go語言的調試(基於Delve調試器)。app

另外,編譯器部分的SSA優化特性尚未啓用,估計要等到Go1.7了。ide

PS:指望下個版本中,可以提供工具自動將以來的包自動提取到vendor目錄,同時記錄相關依賴包的版本信息。函數

cgo的指針傳遞規範

這部分是比較大的改動,不過大部分用戶沒有用到cgo的功能。

簡單來講,能夠將不包含嵌套指針的Go對象的指針經過cgo傳入C語言函數使用。C語言函數要確保不能在任何Go語言的內存中保存該指針。C語言函數返回後也不能再持有傳入的Go語言對象的指針。一個C函數調用的Go函數,或者是一個Go函數調用的C函數都不能返回一個Go語言對象的指針。C語言函數能夠返回指向C語言對象的指針(C語言對象內部不能含有Go對象的指針)。雖然C函數不能在返回後繼續持有Go對象的指針,可是Go函數能夠在返回後繼續持有C語言對象的指針(C對象內部仍是不能含有Go對象的指針)。

以上的指針傳遞規則是有runtime運行時動態檢測的。該檢測行爲能夠經過GODEBUG環境變量來控制。默認人值是GODEBUG=cgocheck=1,也就是檢測是開啓的。關閉檢測能夠經過設置GODEBUG=cgocheck=0完成。完整的檢測須要設置GODEBUG=cgocheck=2,可能致使必定的性能損失。

固然,經過unsafe包能夠打破任何的Go語言規則,不過這是危險的行爲。

具體請參考《Go語言聖經》第十三章 底層編程

Runtime變化

增長了一個輕量級的對map非法併發訪問問題的檢測。當一個goroutine更新一個map時,任何其它的goroutine讀或寫同一個map都將致使程序終止。更嚴格的檢測能夠用race來完成。

同時,修復了Windows命令行下,print/println/panic中文亂碼問題。

GC的性能對比

輸入圖片說明

HTTP/2 支持

Go1.6的net/http包增長了對 HTTP/2 標準協議的支持。當Go的客戶端使用HTTPS的時候會默認使用 HTTP2 協議。這裏並無針對HTTP2協議改變包的接口。

若是客戶端須要禁止 HTTP2 協議,能夠經過將 Transport.TLSNextProto(客戶端) 或 Server.TLSNextProto(服務器) 設置爲非nil的空map實現。

其餘

  • Reflect包有更新,可能須要更新相關代碼,具體請參考 Issue12367
  • 模板部分增長了 "{{23 -}} < {{- 45}}"{block "title"}} 語法。
  • Sort包默認將採用不穩定的排序,其中Stable用於穩定排序。
  • 標準庫中其它包的變化

參考連接

相關文章
相關標籤/搜索