Go開發團隊正式宣布推出Go 1.11版本。新版本在工具鏈、運行時和庫等方面有很多變化和改進,特別是增加了模塊支持和WebAssembly支持兩個新特性。
今天,Go開發團隊宣布推出Go 1.11正式版。
這距離Go 1.10的發布已經過去六個月。
新版本在工具鏈、運行時和庫等方面有很多變化和改進,兼容性方面也依然會兼容舊版本。此外,新版本增加了兩個最激動人心的新特性:對模塊(modules)和WebAssembly的支持。
模塊、軟件包版本控制和依賴關系管理
Go 1.11版本增加了對“模塊”(modules)這個新概念的初步支持,這是GOPATH的替代方案,集成了對版本控制和軟件包分發的支持。
使用modules,開發人員將不再局限于在GOPATH中工作,版本依賴性信息是顯式而且輕量級的,并且構建項更具可靠性和可重復性。
模塊支持功能目前仍處于實驗性階段,根據Go 1.11用戶的反饋,細節可能會發生變化,Go開發團隊也在計劃增加更多工具。模塊支持可能仍有一些可能影響使用的問題,因此請充分利用問題跟蹤器進行反饋或查閱解決方案。
WebAssembly
Go 1.11還為WebAssembly(js/wasm)添加了一個實驗端口。這允許程序員將Go程序編譯為與四種主流Web瀏覽器兼容的二進制格式。
目前,Go程序編譯為一個WebAssembly模塊,該模塊包括Go runtime,用于goroutine scheduling,garbage collection,maps等。因此,其大小至少約為2 MB,或壓縮為500 KB。Go程序可以使用新的實驗性syscall/js包調用JavaScript。二進制大小和與其他語言的互操作還不是優先級的,但可能在將來的版本中解決。
由于添加了新的GOOS值“js”和GOARCH值“wasm”,Go工具現在將忽略名為* _js.go或* _wasm.go的Go文件,除非使用了那些GOOS/GOARCH值。如果你的現有文件名與這些模式一致,則需要重命名它們。
你可以在webassembly.org上閱讀有關WebAssembly(縮寫為“Wasm”)的更多信息,并查看這個Wiki頁面,了解如何開始使用Wasm with Go。
其他工具
導入路徑限制
由于 Go 模塊支持在命令行操作中為符號@指定了特殊含義,因此該Go命令現在不允許使用包含@符號的導入路徑。goget從未允許這種導入路徑,因此該限制只會影響用戶通過其他方式構建自定義 GOPATH 樹。
Package 加載
新的軟件包golang.org/x/tools/go/packages提供了一個簡單的API來定位和加載Go源代碼包。雖然它還不是標準庫的一部分,但對于許多任務,它有效地替代了go/build包,后者的API無法完全支持模塊。這個AIP支持構建分析工具,這些工具與Bazel和Buck等替代構建系統同樣有效。
構建緩存要求
Go 1.11 將是支持設置環境變量GOCACHE=off以禁用構建緩存的最后一個版本。從 Go 1.12 開始,將需要構建緩存,作為消除$GOPATH/pkg的步驟。
編譯器工具鏈
默認情況下,現在更多函數可以進行內聯,包括調用panic的函數。編譯器工具鏈現在支持行指令中的列信息。引入了新的包導出數據格式。
匯編程序amd64現在接受 AVX512 指令。
調試
編譯器現在可以為優化的二進制文件生成更精確的調試信息,包括可變位置信息、行號和斷點位置。這將使調試沒有-N -l編譯的二進制文件成為可能。Go 1.11添加了在調試器中調用Go函數的實驗性支持。
測試
從Go 1.10開始,Go test命令在被測試的包上運行Go vet,以便在運行測試之前識別問題。因為vet在運行前用go/type檢查代碼,所以不檢查類型的測試將會失敗。
Vet
go vet命令現在在分析包未進行類型檢查時會報告致命錯誤。一起,類型檢查錯誤只會導致打印警告,并以狀態1退出vet。
跟蹤
使用新的runtime/trace包的用戶注釋API,用戶可以在執行跟蹤中記錄應用程序級別的信息,并創建相關的goroutines組。go tool trace這個命令在跟蹤視圖和新用戶任務/區域分析頁面中顯示此信息。
Runtime
runtime現在使用稀疏堆布局,因此不再限制Go堆的大小(以前的限制是512GiB)。這也解決了使用-race編譯的混合Go/C二進制文件或二進制文件中的“address space conflict”故障。
在macOS和iOS上,運行時現在使用libSystem.so,而不是直接調用內核。這應該使Go二進制文件與未來版本的macOS和iOS更加兼容。syscall package仍然可以進行直接的系統調用。
此外,Go 1.11正式版對核心庫也有更改,不過所有更改都比較小。具體請見Release Notes。
Google 的 Go 工程師AndrewBonventre在博客中特別感謝了Richard Musiol為WebAssembly端口做出的貢獻,以及感謝為這個新版本做出貢獻的所有人,包括編寫代碼,提交錯誤,提供反饋和/或測試測試版和發布候選版本。如果你在使用中發現任何問題,請提交問題。
-
模塊
+關注
關注
7文章
2695瀏覽量
47432 -
Go
+關注
關注
0文章
43瀏覽量
12248 -
編譯器
+關注
關注
1文章
1623瀏覽量
49108
原文標題:入坑搞定Python多種任務,Go 1.11 新版本正式發布!
文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論