日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Go1.21 速覽:支持自定義 go.env 文件,可惜還是有所殘缺

大家好,我是煎魚(yú)。

創(chuàng)新互聯(lián)建站一直在為企業(yè)提供服務(wù),多年的磨煉,使我們?cè)趧?chuàng)意設(shè)計(jì),成都全網(wǎng)營(yíng)銷到技術(shù)研發(fā)擁有了開(kāi)發(fā)經(jīng)驗(yàn)。我們擅長(zhǎng)傾聽(tīng)企業(yè)需求,挖掘用戶對(duì)產(chǎn)品需求服務(wù)價(jià)值,為企業(yè)制作有用的創(chuàng)意設(shè)計(jì)體驗(yàn)。核心團(tuán)隊(duì)擁有超過(guò)十余年以上行業(yè)經(jīng)驗(yàn),涵蓋創(chuàng)意,策化,開(kāi)發(fā)等專業(yè)領(lǐng)域,公司涉及領(lǐng)域有基礎(chǔ)互聯(lián)網(wǎng)服務(wù)服務(wù)器托管、重慶APP開(kāi)發(fā)、手機(jī)移動(dòng)建站、網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)絡(luò)整合營(yíng)銷。

不知道大家平時(shí)在調(diào)整 Go 環(huán)境變量是怎么設(shè)置的呢,還是說(shuō)都用默認(rèn)配置,又或是直接走 IDE 設(shè)置?

Go 環(huán)境變量發(fā)展歷程

像以前最早時(shí),有的同學(xué)是打開(kāi) ~/.zshrc,一番 vim 操作,設(shè)置好 export GO111MODULE=on。最后再 source 一下。雖然簡(jiǎn)單,其實(shí)也是有好幾個(gè)步驟的:

$ vi ~/.zshrc
$ export GO111MODULE=on
$ source ~/.zshrc

到了近年,Go 支持使用 go env -w 去設(shè)置對(duì)應(yīng)的 Go 環(huán)境變量:

$ go env -w GO111MODULE=on

其默認(rèn)寫(xiě)入的路徑是:filepath.Join(os.UserConfigDir(), "go/env")。對(duì)應(yīng)不同的操作系統(tǒng):

  • MacOS:$HOME/Library/Application Support/go/env。
  • Linux:$HOME/.config/go/env。

經(jīng)過(guò)幾年演進(jìn),Go 環(huán)境變量的設(shè)置逐漸變得更方便。網(wǎng)上的教程、博客也紛紛改變了寫(xiě)法。

這是截至目前的 Go 環(huán)境變量的歷程。

Go1.21 go.env 誕生

不太好的地方

大家會(huì)發(fā)現(xiàn),Go 現(xiàn)在的環(huán)境變量是越來(lái)越多了...如果都是用 go env -w 慢慢的就會(huì)越積累越多,配置也就變得復(fù)雜了起來(lái)。

另外較為棘手的還有不同的 Go 項(xiàng)目之間的所需配置可能不太一樣,產(chǎn)生交叉影響。也是一個(gè)影響點(diǎn)。

這讓我想起了 Python 以前沒(méi)有虛擬環(huán)境時(shí)的痛苦。Go 像是在 GO111MODULE 環(huán)境變量,會(huì)默認(rèn)使用 auto 來(lái)規(guī)避這個(gè)問(wèn)題。會(huì)相較之輕微許多。

無(wú)論是輕還是重,問(wèn)題還是存在的。

引入改進(jìn)措施

因此在 Go1.21 這個(gè)新版本起,將會(huì)以用戶設(shè)置的 $GOROOT/go.env 為更高優(yōu)先級(jí),會(huì)覆蓋默認(rèn)的設(shè)置。

既有的 GOPROXY、GOSUMDB 配置將會(huì)挪動(dòng)到 go.env 文件中,文件內(nèi)容如下:

GOPROXY=https://proxy.golang.org,direct
GOSUMDB=sum.golang.org

GOTOOLCHAIN=auto
...

有了 go.env 文件后,后續(xù)就可以使用他來(lái)代替默認(rèn)變量或手動(dòng)設(shè)置的步驟了。

有些瑕疵點(diǎn)

目前 Go1.21 只是引入了 $GOROOT/go.env 這一個(gè)全局的 ENV 配置文件。看著也有些瑕疵。為什么?

一般來(lái)講要做完整,應(yīng)該要做到模塊(go.mod)的級(jí)別,也就是每個(gè) Go 應(yīng)用有一個(gè) go.env,這樣子才能夠完全的實(shí)現(xiàn)項(xiàng)目(模塊)級(jí)別的隔離。

但很可惜,Go 新版本這次把這個(gè)部分給暫時(shí)放棄了。因?yàn)槊總€(gè)模塊引入 go.env 會(huì)涉及太多的太多重大問(wèn)題。

例如:

  • 為什么引入一個(gè)單獨(dú)的文件(go.env)而不是擴(kuò)展 go.work?
  • 在模塊的 go.env 中是否允許所有的 Go 環(huán)境變量?
  • 是否有一個(gè)選項(xiàng)來(lái)禁用模塊的 go.env?或者這個(gè)新的 go.env 應(yīng)該被默認(rèn)忽略?
  • GoEnv 的具體含義?
  • 需要一些工具?幫助用戶調(diào)試,告訴他們最終獲得的 Go 環(huán)境變量的過(guò)程和來(lái)自哪里,因?yàn)楝F(xiàn)在有太多的數(shù)據(jù)源了。
  • ...

相反引入 $GOROOT/go.env 會(huì)更加明確和沒(méi)什么爭(zhēng)議,畢竟還是局限于既有體系下的全局配置源的新增支持。

綜合來(lái)看,最后 Russ Cox 迅速躺平,取消了模塊(go.mod)級(jí)別的 go.env 支持。接受了此次提案的調(diào)整。

總結(jié)

各個(gè)編程語(yǔ)言的配置項(xiàng)和依賴管理一直是一大心魔,前有 Python3 使用 venv(虛擬環(huán)境)來(lái)解決。后有 Go,先是 godep,接著靠 Russ Cox 力排眾議推 Go modules(go.mod)來(lái)解決依賴管理。

接下來(lái)就是 Go 的配置項(xiàng)的逐步調(diào)整了,這個(gè)阻力相對(duì)于依賴管理小許多。相信不需要太久,各模塊很快就會(huì)允許有自己的 go.env 文件,來(lái)實(shí)現(xiàn)配置隔離。

大家可以持續(xù)關(guān)注!先從 $GOROOT/go.env 開(kāi)始跟進(jìn)。也可以加我下方微信,在 Go 技術(shù)交流群一起緊跟新技術(shù)知識(shí)。


當(dāng)前標(biāo)題:Go1.21 速覽:支持自定義 go.env 文件,可惜還是有所殘缺
分享URL:http://www.dlmjj.cn/article/dhigipo.html