掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
大家好,我是煎魚。

創(chuàng)新互聯(lián)建站一直在為企業(yè)提供服務(wù),多年的磨煉,使我們在創(chuàng)意設(shè)計,成都全網(wǎng)營銷到技術(shù)研發(fā)擁有了開發(fā)經(jīng)驗。我們擅長傾聽企業(yè)需求,挖掘用戶對產(chǎn)品需求服務(wù)價值,為企業(yè)制作有用的創(chuàng)意設(shè)計體驗。核心團(tuán)隊擁有超過十余年以上行業(yè)經(jīng)驗,涵蓋創(chuàng)意,策化,開發(fā)等專業(yè)領(lǐng)域,公司涉及領(lǐng)域有基礎(chǔ)互聯(lián)網(wǎng)服務(wù)服務(wù)器托管、重慶APP開發(fā)、手機(jī)移動建站、網(wǎng)頁設(shè)計、網(wǎng)絡(luò)整合營銷。
不知道大家平時在調(diào)整 Go 環(huán)境變量是怎么設(shè)置的呢,還是說都用默認(rèn)配置,又或是直接走 IDE 設(shè)置?
像以前最早時,有的同學(xué)是打開 ~/.zshrc,一番 vim 操作,設(shè)置好 export GO111MODULE=on。最后再 source 一下。雖然簡單,其實也是有好幾個步驟的:
$ vi ~/.zshrc
$ export GO111MODULE=on
$ source ~/.zshrc到了近年,Go 支持使用 go env -w 去設(shè)置對應(yīng)的 Go 環(huán)境變量:
$ go env -w GO111MODULE=on其默認(rèn)寫入的路徑是:filepath.Join(os.UserConfigDir(), "go/env")。對應(yīng)不同的操作系統(tǒng):
經(jīng)過幾年演進(jìn),Go 環(huán)境變量的設(shè)置逐漸變得更方便。網(wǎng)上的教程、博客也紛紛改變了寫法。
這是截至目前的 Go 環(huán)境變量的歷程。
大家會發(fā)現(xiàn),Go 現(xiàn)在的環(huán)境變量是越來越多了...如果都是用 go env -w 慢慢的就會越積累越多,配置也就變得復(fù)雜了起來。
另外較為棘手的還有不同的 Go 項目之間的所需配置可能不太一樣,產(chǎn)生交叉影響。也是一個影響點。
這讓我想起了 Python 以前沒有虛擬環(huán)境時的痛苦。Go 像是在 GO111MODULE 環(huán)境變量,會默認(rèn)使用 auto 來規(guī)避這個問題。會相較之輕微許多。
無論是輕還是重,問題還是存在的。
因此在 Go1.21 這個新版本起,將會以用戶設(shè)置的 $GOROOT/go.env 為更高優(yōu)先級,會覆蓋默認(rèn)的設(shè)置。
既有的 GOPROXY、GOSUMDB 配置將會挪動到 go.env 文件中,文件內(nèi)容如下:
GOPROXY=https://proxy.golang.org,direct
GOSUMDB=sum.golang.org
GOTOOLCHAIN=auto
...有了 go.env 文件后,后續(xù)就可以使用他來代替默認(rèn)變量或手動設(shè)置的步驟了。
目前 Go1.21 只是引入了 $GOROOT/go.env 這一個全局的 ENV 配置文件??粗灿行╄Υ谩槭裁??
一般來講要做完整,應(yīng)該要做到模塊(go.mod)的級別,也就是每個 Go 應(yīng)用有一個 go.env,這樣子才能夠完全的實現(xiàn)項目(模塊)級別的隔離。
但很可惜,Go 新版本這次把這個部分給暫時放棄了。因為每個模塊引入 go.env 會涉及太多的太多重大問題。
例如:
相反引入 $GOROOT/go.env 會更加明確和沒什么爭議,畢竟還是局限于既有體系下的全局配置源的新增支持。
綜合來看,最后 Russ Cox 迅速躺平,取消了模塊(go.mod)級別的 go.env 支持。接受了此次提案的調(diào)整。
各個編程語言的配置項和依賴管理一直是一大心魔,前有 Python3 使用 venv(虛擬環(huán)境)來解決。后有 Go,先是 godep,接著靠 Russ Cox 力排眾議推 Go modules(go.mod)來解決依賴管理。
接下來就是 Go 的配置項的逐步調(diào)整了,這個阻力相對于依賴管理小許多。相信不需要太久,各模塊很快就會允許有自己的 go.env 文件,來實現(xiàn)配置隔離。
大家可以持續(xù)關(guān)注!先從 $GOROOT/go.env 開始跟進(jìn)。也可以加我下方微信,在 Go 技術(shù)交流群一起緊跟新技術(shù)知識。

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流