1. 背景
成都創(chuàng)新互聯(lián)公司是一家業(yè)務(wù)范圍包括IDC托管業(yè)務(wù),雅安服務(wù)器托管、主機(jī)租用、主機(jī)托管,四川、重慶、廣東電信服務(wù)器租用,成都電信服務(wù)器托管,成都網(wǎng)通服務(wù)器托管,成都服務(wù)器租用,業(yè)務(wù)范圍遍及中國(guó)大陸、港澳臺(tái)以及歐美等多個(gè)國(guó)家及地區(qū)的互聯(lián)網(wǎng)數(shù)據(jù)服務(wù)公司。不論是開發(fā)Java還是你正在學(xué)習(xí)的Golang,都會(huì)遇到依賴管理問題。Java有牛逼轟轟的Maven和Gradle。 Golang亦有g(shù)odep、govendor、glide、gvt、gopack等等,本文主要給大家介紹gilde。 glide是Golang的包管理工具,是為了解決Golang依賴問題的。 為什么需要glide? 原因很簡(jiǎn)單,Go 語言原生包管理的缺陷。羅列一下golang的 get 子命令管理依賴有很多大缺陷:
* 能拉取源碼的平臺(tái)很有限,絕大多數(shù)依賴的是 github.com
* 不能區(qū)分版本,以至于令開發(fā)者以最后一項(xiàng)包名作為版本劃分
* 依賴 列表/關(guān)系 無法持久化到本地,需要找出所有依賴包然后一個(gè)個(gè) go get
* 只能依賴本地全局倉庫(GOPATH/GOROOT),無法將庫放置于局部倉庫($PROJECT_HOME/vendor)
2. Error問題
項(xiàng)目中使用到了golang.org/x/crypto/ssh包,而由于國(guó)內(nèi)網(wǎng)絡(luò)原因,無法直接下載,需要提前從github.com/golang/crypto下載然后放到指定位置
* 項(xiàng)目中g(shù)lide依賴初始化
[lisea@lisea test]$ glide init [INFO] Generating a YAML configuration file and guessing the dependencies [INFO] Attempting to import from other package managers (use --skip-import to skip) [INFO] Scanning code to look for dependencies [INFO] --> Found reference to github.com/pkg/sftp [INFO] --> Found reference to golang.org/x/crypto/ssh [INFO] Writing configuration file (glide.yaml) [INFO] Would you like Glide to help you find ways to improve your glide.yaml configuration? [INFO] If you want to revisit this step you can use the config-wizard command at any time. [INFO] Yes (Y) or No (N)? Y [INFO] Loading mirrors from mirrors.yaml file [INFO] Looking for dependencies to make suggestions on [INFO] --> Scanning for dependencies not using version ranges [INFO] --> Scanning for dependencies using commit ids [INFO] Gathering information on each dependency [INFO] --> This may take a moment. Especially on a codebase with many dependencies [INFO] --> Gathering release information for dependencies [INFO] --> Looking for dependency imports where versions are commit ids Y [INFO] Here are some suggestions... [INFO] The package github.com/pkg/sftp appears to have Semantic Version releases (http://semver.org). [INFO] The latest release is 1.2.0. You are currently not using a release. Would you like [INFO] to use this release? Yes (Y) or No (N) [INFO] Would you like to remember the previous decision and apply it to future [INFO] dependencies? Yes (Y) or No (N) Y [INFO] Updating github.com/pkg/sftp to use the release 1.2.0 instead of no release [INFO] The package github.com/pkg/sftp appears to use semantic versions (http://semver.org). [INFO] Would you like to track the latest minor or patch releases (major.minor.patch)? [INFO] Tracking minor version releases would use '>= 1.2.0, < 2.0.0' ('^1.2.0'). Tracking patch version [INFO] releases would use '>= 1.2.0, < 1.3.0' ('~1.2.0'). For more information on Glide versions [INFO] and ranges see https://glide.sh/docs/versions [INFO] Minor (M), Patch (P), or Skip Ranges (S)? P [INFO] Would you like to remember the previous decision and apply it to future [INFO] dependencies? Yes (Y) or No (N) Y [INFO] Updating github.com/pkg/sftp to use the range ~1.2.0 instead of commit id 1.2.0 [INFO] Configuration changes have been made. Would you like to write these [INFO] changes to your configuration file? Yes (Y) or No (N) Y [INFO] Writing updates to configuration file (glide.yaml) [INFO] You can now edit the glide.yaml file.: [INFO] --> For more information on versions and ranges see https://glide.sh/docs/versions/ [INFO] --> For details on additional metadata see https://glide.sh/docs/glide.yaml/
* 初始化后生成的依賴如下:(glide.yaml)
[lisea@lisea test]$ cat glide.yaml package: test import: - package: github.com/pkg/sftp version: ~1.2.0 - package: golang.org/x/crypto/ssh
* glide安裝依賴[ERROR報(bào)錯(cuò)]
[lisea@lisea test]$ glide install [INFO] Loading mirrors from mirrors.yaml file [INFO] Lock file (glide.lock) does not exist. Performing update. [INFO] Loading mirrors from mirrors.yaml file [INFO] Downloading dependencies. Please wait... [INFO] --> Fetching golang.org/x/crypto/ssh [INFO] --> Fetching updates for github.com/pkg/sftp [WARN] Unable to checkout golang.org/x/crypto/ssh [ERROR] Update failed for golang.org/x/crypto/ssh: Cannot detect VCS [ERROR] Failed to do initial checkout of config: Cannot detect VCS
3. ERROR解決
經(jīng)通過度娘查詢一圈發(fā)現(xiàn),十個(gè)結(jié)果九個(gè)一樣內(nèi)容(在此鄙視抓內(nèi)容的站點(diǎn)和純copy的博主三秒種),最后在glide開源點(diǎn)github上的issue上找到解決方式
* 修改glide生成的glide.yaml文件
package: test import: - package: github.com/pkg/sftp version: ~1.2.0 - package: golang.org/x/crypto/ssh
修改為:
package: test import: - package: github.com/pkg/sftp version: ~1.2.0 - package: golang.org/x/crypto subpackages: - ssh
* 重新更新下載依賴
[lisea@lisea test]$ glide up [INFO] Loading mirrors from mirrors.yaml file [INFO] Downloading dependencies. Please wait... [INFO] --> Fetching updates for golang.org/x/crypto [INFO] --> Fetching updates for github.com/pkg/sftp [INFO] --> Detected semantic version. Setting version for github.com/pkg/sftp to 1.2.0 [INFO] Resolving imports [INFO] --> Fetching updates for github.com/kr/fs [INFO] --> Fetching updates for github.com/pkg/errors [INFO] Downloading dependencies. Please wait... [INFO] Setting references for remaining imports [INFO] Exporting resolved dependencies... [INFO] --> Exporting github.com/pkg/errors [INFO] --> Exporting github.com/pkg/sftp [INFO] --> Exporting golang.org/x/crypto [INFO] --> Exporting github.com/kr/fs [INFO] Replacing existing vendor dependencies [INFO] Project relies on 4 dependencies.
successfully 成功解決
4. 總結(jié)
以需求驅(qū)動(dòng)技術(shù),技術(shù)本身沒有優(yōu)略之分,只有業(yè)務(wù)之分。
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開啟,新人活動(dòng)云服務(wù)器買多久送多久。
本文名稱:Glide--------Golang依賴包解決工具之錯(cuò)誤實(shí)踐-創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://muchs.cn/article0/dpiioo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、企業(yè)建站、軟件開發(fā)、商城網(wǎng)站、用戶體驗(yàn)、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容