最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解析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)文章

  • 基于Go實現(xiàn)TCP長連接上的請求數(shù)控制

    基于Go實現(xiàn)TCP長連接上的請求數(shù)控制

    在服務(wù)端開啟長連接的情況下,四層負(fù)載均衡轉(zhuǎn)發(fā)請求時,會出現(xiàn)服務(wù)端收到的請求qps不均勻的情況或是服務(wù)器無法接受到請求,因此需要服務(wù)端定期主動斷開一些長連接,所以本文給大家介紹了基于Go實現(xiàn)TCP長連接上的請求數(shù)控制,需要的朋友可以參考下
    2024-05-05
  • go?mongox簡潔高效文檔操作及bson數(shù)據(jù)構(gòu)造流暢技巧

    go?mongox簡潔高效文檔操作及bson數(shù)據(jù)構(gòu)造流暢技巧

    這篇文章主要為大家介紹了go?mongox簡潔高效文檔操作及bson數(shù)據(jù)構(gòu)造流暢技巧示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Go?net?http超時應(yīng)用場景全面詳解

    Go?net?http超時應(yīng)用場景全面詳解

    HTTP是一個復(fù)雜的多階段協(xié)議,因此沒有一個一刀切的超時解決方案,在這篇文章中,我將分解您可能需要應(yīng)用超時的各個階段,并研究在服務(wù)器端和客戶端上執(zhí)行超時的不同方法
    2024-01-01
  • golang fmt占位符的使用詳解

    golang fmt占位符的使用詳解

    這篇文章主要介紹了golang fmt占位符的使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 詳解Go語言如何實現(xiàn)字符串切片反轉(zhuǎn)函數(shù)

    詳解Go語言如何實現(xiàn)字符串切片反轉(zhuǎn)函數(shù)

    Go?語言不像其他語言如?Python,有著內(nèi)置的?reverse()?函數(shù),本文將先學(xué)習(xí)一下Python中對于列表的反轉(zhuǎn)方法,然后再學(xué)習(xí)如果在Go語言中實現(xiàn)相同的功能,感興趣的小伙伴快跟隨小編一起來學(xué)習(xí)一下
    2022-10-10
  • go如何刪除字符串中的部分字符

    go如何刪除字符串中的部分字符

    這篇文章主要介紹了go刪除字符串中的部分字符操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • go語言實現(xiàn)二叉樹的序例化與反序列化

    go語言實現(xiàn)二叉樹的序例化與反序列化

    這篇文章主要介紹了go語言實現(xiàn)二叉樹的序例化與反序列化,文章圍繞主題展開詳細(xì)內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • 使用dep 配置golang 開發(fā)環(huán)境的操作方法

    使用dep 配置golang 開發(fā)環(huán)境的操作方法

    下面小編就為大家?guī)硪黄褂胐ep 配置golang 開發(fā)環(huán)境的操作方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Go FX框架用法小結(jié)

    Go FX框架用法小結(jié)

    Go FX是一個功能強(qiáng)大的框架,通過依賴注入和生命周期管理來簡化應(yīng)用的構(gòu)建與維護(hù),本文就來介紹一下Go FX框架用法小結(jié),具有一定的參考價值,感興趣的可以了解一下
    2025-03-03
  • Golang中crypto/ecdsa庫實現(xiàn)數(shù)字簽名和驗證

    Golang中crypto/ecdsa庫實現(xiàn)數(shù)字簽名和驗證

    本文主要介紹了Golang中crypto/ecdsa庫實現(xiàn)數(shù)字簽名和驗證,將從ECDSA的基本原理出發(fā),詳細(xì)解析如何在Go語言中實現(xiàn)數(shù)字簽名和驗證,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02

最新評論

土默特左旗| 五峰| 马山县| 蚌埠市| 奉新县| 竹溪县| 金昌市| 永丰县| 绥中县| 朔州市| 屏东市| 都江堰市| 班戈县| 乡城县| 安仁县| 毕节市| 临洮县| 阿克陶县| 平乡县| 娄烦县| 阿巴嘎旗| 昂仁县| 民丰县| 盘山县| 丹凤县| 舒城县| 克东县| 建水县| 凤阳县| 麻栗坡县| 西昌市| 芮城县| 常德市| 曲阜市| 北川| 青河县| 习水县| 沽源县| 武汉市| 长子县| 平江县|