欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解析Golang中的GoPath和GoModule

 更新時間:2022年02月02日 09:30:02   作者:hubb  
在Golang中,有兩個概念非常容易弄錯,第一個就是GoPath,第二個則是GoModule,很多初學(xué)者不清楚這兩者之間的關(guān)系,也就難以清晰地了解項目的整體結(jié)構(gòu),今天通過本文給大家介紹下Golang中的GoPath和GoModule相關(guān)知識,感興趣的朋友一起看看吧

GoModule無法下載國外的依賴包問題
在Golang中,有兩個概念非常容易弄錯,第一個就是GoPath,第二個則是GoModule,很多初學(xué)者不清楚這兩者之間的關(guān)系,也就難以清晰地了解項目的整體結(jié)構(gòu),自然也就難以編寫結(jié)構(gòu)清晰的代碼。

什么是GoPath?

什么是Gopath?在我的上一篇博客Golang環(huán)境安裝&IDEA開發(fā)Golang中,曾經(jīng)提到過GoPath的概念。
GoPath是Golang的工作空間,所有的Go文件,都需要放在GoPath下的src目錄下才能夠編譯運行,所以我提議不要直接配置全局的GoPath目錄,否則會非常難以管理所有的Golang項目。

但是在另一篇博客Golang連接MySQL數(shù)據(jù)庫之CRUD中,我也提到過,我們在項目中使用第三方類庫的時候,可以使用go get命令從網(wǎng)下直接拉去第三方類庫的包,而拉取下來的包就會直接下載到我們的GoPath目錄下的src包下。

這樣就導(dǎo)致了一個問題,我們自己的Golang代碼,和第三方的Golang文件混在了一起,這對于我們管理Golang項目的包顯然是非常麻煩的,而且每個如果項目都需要同樣的依賴,那么我們就會在不同的GoPath的src中下載大量重復(fù)的第三方依賴包,這同樣會占用大量的磁盤空間。

我們給不同的項目設(shè)置不同的GoPath,優(yōu)點非常明顯:

便于管理項目,每個項目都是不同的GoPath,這對于我們管理多個Golang項目而言,能夠非常清晰的處理項目結(jié)構(gòu)。如果我們把所有項目都放在同一個GoPath的src包下,那么項目的結(jié)構(gòu)就會變得非常混亂,難以管理。

但是當(dāng)我們需要依賴第三方的包的時候,不同的項目設(shè)置不同的GoPath的缺點也非常明顯:

第三方依賴的包和我們自己的Golang包混在一起,會給我們的項目文件管理帶來一定的麻煩。
不同的GoPath都需要下載依賴,那么磁盤中重復(fù)的依賴就會非常多,會占用我們大量的磁盤空間。
所以,究竟是設(shè)置一個GoPath目錄,解決依賴重復(fù)的問題,還是設(shè)置不同的GoPath目錄,解決Golang項目結(jié)構(gòu)混亂的問題,這是一個有爭議性的問題。

為了解決這所有的問題,Golang最終引入了GoModule的概念。

什么是GoModule?

GoModule是Golang在1.11版本初步引入的概念,在1.12版本中正是開始使用,所以如果需要使用GoModule,那么需要保證你的Golang的版本在1.12或以上。
另外需要說一下,Golang1.11和1.12版本雖然已經(jīng)引入了GoModule的概念,但是GoModule是默認(rèn)不開啟的,如果需要開啟,那么需要配置一個環(huán)境變量:GO111MODULE=on,默認(rèn)是off。

而在Golang1.13及以上的版本中,GoModule的默認(rèn)配置為auto,即GoModule會通過你的目錄下是否有g(shù)o.mod文件來判斷是否開啟GoModule。所以Golang1.13+的版本中我們就不需要配置GO111MODULE屬性了。
所以如果你使用GoModule,那么就直接使用Golang1.13+的版本好了!

那么究竟什么是GoModule?

其實說得直白一下,GoModule就是一個用來取代GoPath的Golang的工作空間。
我們之前說過,所有的Golang的文件,都需要放在GoPath目錄下才能進(jìn)行正確的編譯和運行,而有了GoModule之后,那么我們就可以把文件放在GoModule目錄下,而放在GoModule目錄下的Golang文件,也可以正確地編譯運行。

那么我們有了GoModule之后,GoPath是不是就可以被舍棄了?

不是的!

我們之前說過,GoPath所引出的問題,就是因為第三方類庫的包所導(dǎo)致的,所以我們在有了GoModule之后,GoPath和GoModule就分別負(fù)責(zé)不同的職責(zé),共同為我們的Golang項目服務(wù)。

GoPath我們用來存放我們從網(wǎng)上拉取的第三方依賴包。
GoModule我們用來存放我們自己的Golang項目文件,當(dāng)我們自己的項目需要依賴第三方的包的時候,我們通過GoModule目錄下的一個go.mod文件來引用GoPath目錄src包下的第三方依賴即可。

這樣依賴,既解決了原來只能局限在GoPath目錄src包下進(jìn)行編程的問題,也解決了第三方依賴包難以管理和重復(fù)依賴占用磁盤空間的問題。

總而言之,在引入GoModule之后,我們不會直接在GoPath目錄進(jìn)行編程,而是把GoPath作為一個第三方依賴包的倉庫,我們真正的工作空間在GoModule目錄下。

GoModule的設(shè)置

既然搞清楚了GoPath和GoModule之間的區(qū)別,那么GoModule又該怎么配置呢?一個目錄怎么才能算是一個GoModule目錄了。

很簡單,我們直接使用go mod init 模塊名稱命令對目錄進(jìn)行初始化操作,即可將這個目錄設(shè)置為GoModule目錄。
我們在F:\GoModule目錄下創(chuàng)建一個文件夾,名字為:go_module。
然后通過cmd命令提示符進(jìn)入該目錄,執(zhí)行g(shù)o mod init 模塊名稱初始化命令。

當(dāng)初始化命令執(zhí)行完畢之后,會在go_module目錄下生成一個go.mod文件,該文件就是用來引入GoPath目錄下的第三方依賴的文件。

初始化之后的go.mod文件

module go_module

go 1.14

當(dāng)我們需要引入GoPath目錄下的第三方依賴包的時候,只需要在go.mod目錄下添加依賴名稱,GoModule就會自動幫我們把第三方依賴包下載到GoPath目錄下。

例如下面的go.mod文件:

我們在這個go.mod文件中引入了兩個依賴,分別是:beego框架 v1.12.1版本和mysql驅(qū)動 v1.5.0版本。

而如果我們使用IDE進(jìn)行開發(fā)的話,那么可以直接創(chuàng)建一個GoModule項目,這樣的話IDE會自動幫我們生成所需要的文件,而且在使用依賴的包的時候,IDE還會自動幫我們加入依賴和下載依賴,這會省去我們大量的時間,而且可以不用再去記憶依賴的具體包名和版本號。
GoModule無法下載國外的依賴包問題
這是一個很多開發(fā)者都碰到過的問題,對于國外的依賴包無法直接通過網(wǎng)絡(luò)進(jìn)行下載,這顯然會讓開發(fā)者非常難受,所以Golang也引入了另一個屬性:GOPROXY,我們只需要在環(huán)境變量中配置GOPROXY=https://goproxy.io即可解決GoModule無法下載國外的依賴包問題。
當(dāng)然,也可以通過IDE來配置,這樣省的在電腦系統(tǒng)的環(huán)境變量配置太多難以管理。

在IDEA中配置GOPROXY屬性:

原文鏈接:https://blog.csdn.net/qq_45193304/article/details/105491864

到此這篇關(guān)于解析Golang中的GoPath和GoModule的文章就介紹到這了,更多相關(guān)Golang中的GoPath和GoModule內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • GoFrame框架Scan類型轉(zhuǎn)換實例

    GoFrame框架Scan類型轉(zhuǎn)換實例

    這篇文章主要為大家介紹了GoFrame框架Scan類型轉(zhuǎn)換的實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • golang elasticsearch Client的使用詳解

    golang elasticsearch Client的使用詳解

    這篇文章主要介紹了golang elasticsearch Client的使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • Golang操作excel的方法

    Golang操作excel的方法

    這篇文章主要介紹了Golang操作excel的方法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • golang調(diào)用藍(lán)兔支付實現(xiàn)網(wǎng)上支付功能

    golang調(diào)用藍(lán)兔支付實現(xiàn)網(wǎng)上支付功能

    支付寶、微信的網(wǎng)上支付需要營業(yè)執(zhí)照個人無法直接使用,如果個人需要實現(xiàn)網(wǎng)上支付功能,目前大部分應(yīng)該是都是依賴第三方聚合支付來實現(xiàn),本文就來介紹一下如何調(diào)用藍(lán)兔支付實現(xiàn)網(wǎng)上支付功能,有需要的可以參考下
    2023-09-09
  • 詳解golang 定時任務(wù)time.Sleep和time.Tick實現(xiàn)結(jié)果比較

    詳解golang 定時任務(wù)time.Sleep和time.Tick實現(xiàn)結(jié)果比較

    本文主要介紹了golang 定時任務(wù)time.Sleep和time.Tick實現(xiàn)結(jié)果比較,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Go語言zip文件的讀寫操作

    Go語言zip文件的讀寫操作

    本文主要介紹了Go語言zip文件的讀寫操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • go并發(fā)實現(xiàn)素數(shù)篩的代碼

    go并發(fā)實現(xiàn)素數(shù)篩的代碼

    這篇文章主要介紹了go并發(fā)實現(xiàn)素數(shù)篩的代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • golang并發(fā)執(zhí)行的幾種方式小結(jié)

    golang并發(fā)執(zhí)行的幾種方式小結(jié)

    本文主要介紹了golang并發(fā)執(zhí)行的幾種方式小結(jié),主要包括了Channel,WaitGroup ,Context,使用這三種機制中的一種或者多種可以達(dá)到并發(fā)控制很好的效果,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • 在Mac中搭建go語言開發(fā)環(huán)境的操作步驟

    在Mac中搭建go語言開發(fā)環(huán)境的操作步驟

    go語言在開發(fā)效率和運行效率中的優(yōu)勢讓很多人青睞,所以有傾向打算轉(zhuǎn)向go語言的開發(fā)。下面介紹在Mac中g(shù)olang的開發(fā)環(huán)境配置。有需要的可以參考借鑒。
    2016-08-08
  • 在golang中使用Sync.WaitGroup解決等待的問題

    在golang中使用Sync.WaitGroup解決等待的問題

    這篇文章主要介紹了在golang中使用Sync.WaitGroup解決等待的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04

最新評論