日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

import java.io 包下载_Go 包管理机制深入分析

發(fā)布時間:2023/12/15 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 import java.io 包下载_Go 包管理机制深入分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

隨著 Go 語言的深入使用,其依賴管理機制也一直是各位 Gopher 熱衷于探討的話題。Go 語言的源碼依賴可通過 go get 命令來獲取,但自動化程度不高,于是官方提供了 Dep 這樣的自動化批量管理依賴的工具。雖然 Go 語言的依賴管理在很多方面還是不如人意,但整個體系正在日趨完善,本篇就將從最基本的依賴管理場景出發(fā),一同探討 Go 語言依賴管理的一些最佳實踐。

Go 依賴管理的基本思路

在 Go 語言中,我們通過 go get 命令將 GitHub 或者 Google Code 上的代碼下載到本地指定目錄,然后在開發(fā)代碼中通過 import 的形式引用本地的代碼。

Go 語言可以通過直接分析代碼中的 import 語句來查詢依賴關(guān)系。go get 命令在執(zhí)行時,就會自動解析 import 來安裝所有的依賴。那么下載的依賴在本地是如何存儲的呢?

這里就涉及到 Go 語言的 WORKSPACE 概念,簡單來說就是通過 GOPATH 環(huán)境變量來設(shè)置 Go 代碼的位置。一般來說,GOPATH 目錄下會包含 pkg、src 和 bin 三個子目錄,這三個目錄各有用處。

bin 目錄用來放置編譯好的可執(zhí)行文件,為了使得這里的可執(zhí)行文件可以方便的運行,在 shell 中設(shè)置PATH變量。

src 目錄用來放置代碼源文件,在進行 import 時,是使用這個位置作為根目錄的。自己編寫的代碼也應(yīng)該放在這下面,不同的項目放在不同的目錄下進行管理。

pkg 用來放置安裝的包的鏈接對象(Object)的。這個概念有點類似于鏈接庫,Go 會將編譯出的可連接庫放在這里,方便編譯時鏈接。不同的系統(tǒng)和處理器架構(gòu)的對象會在 pkg 存放在不同的文件夾中。

當項目在 src 目錄下管理時,多個項目可能都會使用相同的依賴,如果每個項目都存一份依賴顯然會帶來大量的冗余,這里我們推薦一個設(shè)置 GOPATH 環(huán)境變量時的小技巧。

這樣第三方包就會默認放置在第一個路徑中,而你可以在第二個路徑下編寫自己的代碼,多個項目共享一份依賴。

dep - 官方 Go 依賴管理工具

dep 是 Go 語言官方提供的依賴管理工具,跟其他依賴管理工具類似,都是通過一個文件描述依賴的坐標信息,然后批量管理(下載、升級等)依賴包(源碼)。dep 是一個開源項目, 大家可以在 https://github.com/golang/dep 了解詳細信息,其安裝方式大家可以參考官方說明,這里我們主要介紹其使用。

基本操作

通過 dep init 命令來初始化,會創(chuàng)建Gopkg.lock,Gopkg.toml文件和一個空的vendor目錄。

我們在代碼中通過 import 命令添加依賴后,通過 dep ensure 就可以下載依賴到本地 $GOPATH/src 目錄下。

main.go

Gopkg.lock

通過 dep status 我們可以查看當前依賴引用的情況

另外有一個 dep check 命令來檢查是否存在依賴被引用,但是代碼中并沒有使用的情況,Go 語言對于依賴的引用比較嚴格,不允許引用了但是沒使用的情況。從軟件安全的角度考慮,這是一個很好的實踐,避免引入一些安全風險。

當然,這種時候我們就需要移除本地依賴,最好不要手動刪除vendor中的內(nèi)容,而是通過 dep ensure -update 命令來移除。

從 dep 的目錄結(jié)構(gòu),我們可以分析出 dep 的基本工作思路:

這里面有兩個關(guān)鍵的步驟:

解析依賴

從當前項目的 import 文件中解析出整個工程的依賴情況,并結(jié)合 Gopkg.toml 定義的規(guī)則,然后將依賴關(guān)系輸出給 Gopkg.lock,注意這個 lock 文件最好不要手動修改。

獲取依賴

通過 Gopkg.lock 了解整個依賴關(guān)系之后,將依賴的具體內(nèi)容拉取下來放到 vendor 目錄中,然后執(zhí)行 Go build 時從本地的 vendor 讀取依賴并完成構(gòu)建。

這一些都是在 dep ensure 時完成的,其實在執(zhí)行這個命令時還可以傳參數(shù),最主要的是 -no-vendor 和 -vendor-only 這兩個參數(shù)。

-no-vendor 參數(shù)只會導(dǎo)致運行 resolve 函數(shù),結(jié)果是創(chuàng)建一個新的Gopkg.lock 文件,不會更新 vendor;而 -vendor-only 參數(shù)將跳過 resolve 并僅運行 vendoring 函數(shù),導(dǎo)致 vendor/ 從已存在的Gopkg.lock 重新更新。

關(guān)于 dep 更多深入內(nèi)容,可以參考

https://golang.github.io/dep/docs/introduction.html

總結(jié)

Go dep 目前是一款比較好用的依賴管理工具,很多比較大型的項目都在使用,從中可以學(xué)習(xí)到依賴管理的一些基本思路,對于理解其他語言,比如 NPM 的依賴管理模型也是比較有好處的。

更多精彩內(nèi)容可以專注我們的在線課堂

微信搜索公眾號:jfrogchina 獲取課程通知

總結(jié)

以上是生活随笔為你收集整理的import java.io 包下载_Go 包管理机制深入分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。