站長(zhǎng)資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        Go語(yǔ)言GOPATH是什么

        GOPATH是Go語(yǔ)言中使用的一個(gè)環(huán)境變量,它使用絕對(duì)路徑提供項(xiàng)目的工作目錄(也稱(chēng)為工作區(qū)), 是存放Golang項(xiàng)目代碼的文件路徑。GOPATH目錄一般為:1、bin,存放編譯生成的二進(jìn)制文件;2、pkg,其中包括XX_amd64、mod和sumdb三個(gè)文件夾;3、src,存放golang項(xiàng)目代碼的位置。

        Go語(yǔ)言GOPATH是什么

        本教程操作環(huán)境:windows7系統(tǒng)、GO 1.18版本、Dell G3電腦。

        一、GOPATH的概念

        GOPATH 是 Go 語(yǔ)言中使用的一個(gè)環(huán)境變量,它使用絕對(duì)路徑提供項(xiàng)目的工作目錄(也稱(chēng)為工作區(qū)), 是存放 Golang 項(xiàng)目代碼的文件路徑, GOPATH 適合處理大量 Go語(yǔ)言源碼、多個(gè)包組合而成的復(fù)雜工程。

        工作目錄是一個(gè)工程開(kāi)發(fā)的相對(duì)參考目錄,好比當(dāng)你要在公司編寫(xiě)一套服務(wù)器代碼,你的工位所包含的桌面、計(jì)算機(jī)及椅子就是你的工作區(qū)。

        工作區(qū)的概念與工作目錄的概念也是類(lèi)似的。如果不使用工作目錄的概念,在多人開(kāi)發(fā)時(shí),每個(gè)人有一套自己的目錄結(jié)構(gòu),讀取配置文件的位置不統(tǒng)一,

        Go語(yǔ)言GOPATH是什么

        二、GOPATH的使用

        GOPATH目錄一般為:

        1、bin 存放編譯生成的二進(jìn)制文件。比如 執(zhí)行命令 go get github.com/google/gops,bin目錄會(huì)生成 gops 的二進(jìn)制文件。

        2、pkg 其中pkg下面以下三個(gè)文件夾。

        • XX_amd64: 其中 XX 是目標(biāo)操作系統(tǒng),比如 mac 系統(tǒng)對(duì)應(yīng)的是darwin_amd64, linux 系統(tǒng)對(duì)應(yīng)的是 linux_amd64,存放的是.a結(jié)尾的文件。
        • mod: 當(dāng)開(kāi)啟go Modules 模式下,go get命令緩存下依賴(lài)包存放的位置
        • sumdb: go get命令緩存下載的checksum數(shù)據(jù)存放的位

        3、src 存放golang項(xiàng)目代碼的位置

        Go語(yǔ)言GOPATH是什么

        如下是一個(gè)完整的Go項(xiàng)目的開(kāi)發(fā)目錄:

        my-go                 // my-go為GOPATH目錄   -- bin      -- myApp1        // 編譯生成      -- myApp2        // 編譯生成      -- myApp3        // 編譯生成   -- pkg                             依賴(lài)包編譯后的*.a文件//   -- src      -- MyApp1        // 項(xiàng)目1         -- models         -- controllers         -- others         -- main.go       -- MyApp2        // 項(xiàng)目2         -- models         -- controllers         -- others         -- main.go
        登錄后復(fù)制

        三、造成問(wèn)題

        在使用 GOPATH 模式下,我們需要將應(yīng)用代碼存放在固定的$GOPATH/src目錄下,且如果執(zhí)行go get使用第三方類(lèi)庫(kù)的時(shí)候會(huì)自動(dòng)下載并安裝到$GOPATH目錄下。 項(xiàng)目的Golang代碼,和第三方的Golang文件混在一起, 每個(gè)如果項(xiàng)目都需要同樣的依賴(lài),那么我們就會(huì)在不同的GoPath的src中下載大量重復(fù)的第三方依賴(lài)包,這同樣會(huì)占用大量的磁盤(pán)空間

        GOPATH 的缺點(diǎn)

        • 必須指定目錄,

        • go get 命令的時(shí)候,無(wú)法指定獲取的版本

        • 引用第三方項(xiàng)目的時(shí)候,無(wú)法處理v1、v2、v3等不同版本的引用問(wèn)題,因?yàn)樵贕OPATH 模式下項(xiàng)目路徑都是 github.com/foo/project

        • 無(wú)法同步一致第三方版本號(hào),在運(yùn)行 Go 應(yīng)用程序的時(shí)候,無(wú)法保證其它人與所期望依賴(lài)的第三方庫(kù)是相同的版本。

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

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

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

        • 第三方依賴(lài)的包和我們自己的Golang包混在一起,會(huì)給我們的項(xiàng)目文件管理帶來(lái)一定的麻煩。

        • 不同的GoPath都需要下載依賴(lài),那么磁盤(pán)中重復(fù)的依賴(lài)就會(huì)非常多,會(huì)占用我們大量的磁盤(pán)空間。

        所以,設(shè)置一個(gè)GoPath目錄,解決依賴(lài)重復(fù)的問(wèn)題,設(shè)置不同的GoPath目錄,解決Golang項(xiàng)目結(jié)構(gòu)混亂的問(wèn)題,這本身就是個(gè)有爭(zhēng)議性的問(wèn)題。

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

        Go語(yǔ)言GOPATH是什么

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
        主站蜘蛛池模板: 精品无码国产污污污免费网站国产 | 精品国产成人在线| 欧美精品VIDEOSSEX少妇| 国产三级精品三级| 亚洲精品高清视频| 国精品无码一区二区三区在线| 婷婷久久精品国产| 国产在线精品一区二区夜色 | 黑人巨大精品欧美| 欧美日韩成人精品久久久免费看 | 精品亚洲综合在线第一区| 久久精品欧美日韩精品| 亚洲日韩中文在线精品第一| 国产精品自在线拍国产手机版| 久久精品国产精品国产精品污 | 亚洲欧美精品丝袜一区二区| 国产精品视频不卡| 永久免费精品视频| 国内精品久久久久| 99视频在线观看精品| 日韩精品真人荷官无码| 亚洲国产精品碰碰| 久久久久亚洲精品男人的天堂| 国产精品主播一区二区| 国产精品片在线观看手机版| 中文字幕一区二区精品区 | 国内精品九九久久久精品| 亚洲AV无码国产精品色午友在线| 免费精品精品国产欧美在线欧美高清免费一级在线 | 91国内外精品自在线播放| 日产精品久久久久久久| 亚洲av永久无码精品秋霞电影影院| 无码8090精品久久一区| 午夜一级日韩精品制服诱惑我们这边| 久久国产热这里只有精品| 精品欧美一区二区在线观看| 精品国产香蕉伊思人在线在线亚洲一区二区 | 精品国精品无码自拍自在线| 久久久国产乱子伦精品作者| 日韩精品无码专区免费播放| 四虎影视永久在线观看精品|