Go1.6正式版本發佈。在 https://golang.org/doc/go1.6 能夠預覽Go1.6的發佈信息。自Go1.5發佈以來的重大變化有如下幾個:html
print
/println
/panic
修復中文亂碼問題。《Go語言聖經》(英文名:《The Go Programming Language》) 是由Go語言核心團隊成員 Alan A. A. Donovan 和 K&R 中的 Brian W. Kernighan 操刀完成。幾乎大部分Go語言核心成員都參與了校對工做,該聖經介紹了Go幾乎所有特性,隨着語言的深刻層層遞進,而且解讀得很是細緻。其中比較能反映Go語言特點的是第七章接口和第八九章併發編程等章節,不過每一節內容都精彩不容錯過,是廣大Gopher的必讀書目。git
Go語言聖經的官網提供了英文版第一章的預覽,不過網上已經有完整的PDF版本能夠下載,你們能夠本身放狗去搜。須要私下交流的請轉QQ羣(531508541)。github
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的功能。
簡單來講,能夠將不包含嵌套指針的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語言規則,不過這是危險的行爲。
增長了一個輕量級的對map非法併發訪問問題的檢測。當一個goroutine更新一個map時,任何其它的goroutine讀或寫同一個map都將致使程序終止。更嚴格的檢測能夠用race來完成。
同時,修復了Windows命令行下,print
/println
/panic
中文亂碼問題。
Go1.6的net/http包增長了對 HTTP/2 標準協議的支持。當Go的客戶端使用HTTPS的時候會默認使用 HTTP2 協議。這裏並無針對HTTP2協議改變包的接口。
若是客戶端須要禁止 HTTP2 協議,能夠經過將 Transport.TLSNextProto
(客戶端) 或 Server.TLSNextProto
(服務器) 設置爲非nil的空map實現。
"{{23 -}} < {{- 45}}"
和 {block "title"}}
語法。