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