Go 1.12 版本的新特性

Go 1.12

昨天,Go 官方發佈 1.12 版本。本文介紹下 Go 1.12 版本變動的內容。golang

Go 1.12 正式版發佈了,距離上個正式發佈版 Go 1.11 已通過去半年。跟往常同樣,Go 1.12 保持了 兼容性承諾,預期全部 Go 程序會像以前同樣正常編譯。新版本的更新亮點有: TLS 1.3 的初步支持、模塊支持的更強大以及提高 macOS & iOS 的前向兼容性。新版在語言規範方面沒作改動。api

Golang
Golang

工具

  • go tool vet 再也不支持;
  • 二進制包在下個版本將再也不支持;
  • go tool tour 再也不包含在主二進制發行版中,須要手動安裝;
  • Go 1.12 在 trace 工具加入了Mutator Utilization 圖的支持,它能夠方便發現 GC 性能受限的狀況;
  • Go Module 進一步支持。計劃在 Go 1.13 默認啓用 module 模式。

GO111MODULE 設置爲 on 時,go 命令如今支持模塊目錄以外的模塊感知操做,前提是這些操做不須要解析相對於當前目錄的導入路徑或顯式編輯 go.mod 文件。諸如 go getgo listgo mod download 之類的命令就像在具備初始空要求的模塊中同樣。緩存

go 命令下載和解壓縮模塊如今能夠安全地同時調用。模塊高速緩存(GOPATH/pkg/mod)必須駐留在支持文件鎖定的文件系統中。安全

go.mod 文件中的 go 指令如今指示該模塊中文件使用的語言版本。若是沒有現有版本,它將被設置爲當前版本(go 1.12)。若是模塊的go指令指定的版本比正在使用的工具鏈更新,則 go 命令將嘗試構建軟件包,而且僅在該構建失敗時纔會記錄不匹配。微信

當使用活動模塊沒法解析導入時,go 命令如今將在查詢模塊高速緩存和經常使用網絡源以前嘗試使用主模塊的replace 指令中提到的模塊。若是找到匹配的替換但但replace指令未指定版本,則 go 命令使用從零time.Time(例如 v0.0.0-00010101000000-000000000000)派生的僞版本。網絡

Runtime

  • 提高了大量堆(Heap)活躍狀態狀況下的清理性能,這減小了垃圾回收以後的分配延遲,能夠更好地將內存釋放回操做系統;
  • Runtime 的 timer 和 deadline 代碼隨着 CPU 數目的增長,會有更好的表現。這提高了網絡鏈接最後期限(deadline)相關操做的性能;
  • 對大型堆分配的相關修復,提高了內存配置文件的精確性;

平臺相關

其中關於 FreeBSD 和 macOS,Go 1.12 是最後一個支持 FreeBSD 10.x 和 macOS 10.10 Yosemite 的版本。下個版本的 Go 1.13 將要求 FreeBSD 11.2+ 或 FreeBSD 12.0+,對於 macOS,則要求 macOS 10.11 El Capitan 或更新版本。工具

核心庫

  • TLS 1.3

Go 1.12 在 RFC 8446 指定的crypto/tls包中添加了對 TLS 1.3 的選擇支持。能夠經過將值 tls13 = 1 添加到 GODEBUG 環境變量來啓用它。 它將在 Go 1.13 中默認啓用。性能

  • 庫的微小變動。與往常同樣,承諾保持 Go 1的兼容性狀況下,庫中有各類微小的更改和更新。

小結

Go 的包管理是一直爲人詬病,從 Go 1.5 引入的 vendor 機制,到準官方工具depgo modules 隨着 Go 1.11 的發佈而和咱們見面了,這是官方提倡的包管理,乃至項目管理機制,能夠再也不須要GOPATH的存在。到當前的 Go 1.12 ,Go 語言作了不少努力,正如 Go 官方博客所說:操作系統

2018 was a great year for the Golang ecosystem, with package management as one of our major focuses.日誌

2018 年是 Go 生態系統的重要一年,包裝管理是咱們的主要關注點之一。 2018 年 2 月,在社區範圍內討論如何將軟件包管理直接集成到Go工具鏈中,而且在8月份,Go 1.11中提供了該功能的第一個粗略實現,稱爲 go modules。 遷移到 go modules 將是 Go 生態系統中影響最深遠的變化。轉換整個生態系統:代碼、用戶、工具等。從 GOPATH 轉換到模塊將須要在許多不一樣領域開展工做。 模塊系統將幫助咱們爲Go生態系統提供更好的身份驗證和構建速度。

相比 godep 和 vendor 機制而言,go modules 已經很先進,Go 1.12 已經發布,能夠考慮逐步遷移到go modules。

瞭解更詳細的發佈日誌,查看原文

訂閱最新文章,歡迎關注個人公衆號

微信公衆號

參考

  1. Go 1.12 Release Notes
  2. Go Modules in 2019
相關文章
相關標籤/搜索