昨天,Go 官方發佈 1.12 版本。本文介紹下 Go 1.12 版本變動的內容。golang
Go 1.12 正式版發佈了,距離上個正式發佈版 Go 1.11 已通過去半年。跟往常同樣,Go 1.12 保持了 兼容性承諾,預期全部 Go 程序會像以前同樣正常編譯。新版本的更新亮點有: TLS 1.3 的初步支持、模塊支持的更強大以及提高 macOS & iOS 的前向兼容性。新版在語言規範方面沒作改動。api
go tool vet
再也不支持;go tool tour
再也不包含在主二進制發行版中,須要手動安裝;Go 1.13
默認啓用 module 模式。當 GO111MODULE
設置爲 on
時,go 命令如今支持模塊目錄以外的模塊感知操做,前提是這些操做不須要解析相對於當前目錄的導入路徑或顯式編輯 go.mod
文件。諸如 go get
,go list
和 go 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
)派生的僞版本。網絡
其中關於 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 或更新版本。工具
Go 1.12 在 RFC 8446 指定的crypto/tls
包中添加了對 TLS 1.3 的選擇支持。能夠經過將值 tls13 = 1
添加到 GODEBUG
環境變量來啓用它。 它將在 Go 1.13
中默認啓用。性能
Go 1
的兼容性狀況下,庫中有各類微小的更改和更新。Go 的包管理是一直爲人詬病,從 Go 1.5 引入的 vendor 機制,到準官方工具dep
,go 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。
瞭解更詳細的發佈日誌,查看原文。