Go1.17 快報:將移除 GOPATH
閱讀本文大概需要 3?分鐘。
大家好,我是站長 polarisxu。
是的,沒看錯,Go 1.16 剛正式發(fā)布,但這里說的是 Go1.17 將會包含的改變(不出意外的話),我會出一系列文章介紹 Go1.17 的變化。(好吧,內卷了,哈哈哈哈!)
關于 Go 1.16 的變化。Reddit 上有一張圖總結的挺好的:

相關的知識點,我之前也寫過很好幾篇文章,有興趣的可以看看:
Go 1.16 的這個新變化需要適應下:go get 和 go install 的變化 提前試用將在 Go1.16 中發(fā)布的內嵌靜態(tài)資源功能 基于 Go1.16 實現(xiàn)靜態(tài)文件的 HTTP Cache 圖書《Go 語言標準庫》更新了:io/fs 包講解
剛剛 Go 官方發(fā)表博文[1],針對 Go1.16 中 “Modules on by default” 進行了詳細講解。默認啟用 Module 是什么意思?也就是說 GO111MODULE=on,進一步,即使沒有 go.mod ,go 命令現(xiàn)在仍以模塊感知模式(module-aware mode)構建包。
盡管如此,你至少還可以手動禁用 Module,即設置 ?GO111MODULE=off。
但官方計劃在 Go1.17 中移除 ?GO111MODULE 這個環(huán)境變量,屆時將只能使用 Module 模式。Go 語言總是針對某個問題的盡量只有一種解決方案,保持其簡單的“本性”,我個人還是挺喜歡的。當然我相信也會有人不喜歡。
這里給大家一些建議:
網(wǎng)上的文章,講解 Go 環(huán)境搭建的,如果不是基于 module,而是 GOPATH 的,直接忽略。GOPATH 的歷史,有興趣可以了解,但作為新手,入門時多半下載的最新版本 Go,這時如果看到文章還是 GOPATH 年代的,基本環(huán)境都搞不定,會很有受挫感。 目前市面上的圖書,大部分都還是基于 GOPATH 的(注:我出版的 《Go 語言編程之旅》是基于 Module 的),這部分內容,基本也可以略過,畢竟 GOPATH 要進博物館了。 如果還沒有遷移到支持 Module 的版本,這半年時間盡快遷移吧,畢竟現(xiàn)在的庫基本會基于 Module 構建,Go 1.17 預計 2021 年 8 月發(fā)布,距離 Go 1.11 過去好幾個版本了,給了充足的過度時間。
此外,在 Go1.17 中關于 module 的特性還會有其他改進,比如支持 lazy module loading[2],這應該會使模塊加載過程更快,更穩(wěn)定。對 Go1.17 中其他設計模塊變化的部分,可以通過 https://github.com/golang/go/labels/modules 查看。
對于 Go 做出廢棄 GOPATH 的決定,你怎么看?
參考資料
博文: https://docs.studygolang.com/blog/go116-module-changes
[2]lazy module loading: https://github.com/golang/go/issues/36460
歡迎關注我
