完美解決golang go get私有倉庫的問題

解決golang go get gitlab私有倉庫的問題(1.13)

1. 問題描述

require ( 
 git.xxxxxxx.com/middle/user v0.0.1
)

go mod tidy 導入包失敗

go get git.xxxxxxx.com/middle/user 失敗

go build 有CHECKSUM過程,無法編譯

2. 現象分析

go get 不支持代碼支持之外的倉庫。並且git 調用鏈過程采取瞭https

下載過程如果機器設置瞭GOPROXY,會導致下載失敗

編譯過程會導致CHECKSUM失敗

3. 物料

物料 說明
git.xxxxxxx.com 私有倉庫
middle/user.git 用戶服務模塊

方案

1、給釋出的倉庫打tag比如v0.0.1,這樣倉庫地址就可以被識別

2、export GOPRIVATE=git.xxxxxxx.com

go build的時候系統就不會用GOPROXY以及不再校驗SUM

3、調整git https===>ssh,註意username換成自己的用戶名

[url "[email protected]"]
    insteadOf = https://git.xxxxxxx.com

結論

這個問題,google 堪稱一絕,夠任性

補充:go get拉取私有項目,遇到 404 Not Found解決辦法

問題

利用go module進行包管理的時候,要獲取遠程倉庫的最新包,使用go get+項目名獲取,提示404 Not Found,如圖:

在這裡插入圖片描述

原因及解決辦法 原因

這是由於go get在進行獲取遠程包的時候,沒有指定用戶以及密碼,導致沒有權限,故失敗

辦法

go get時添加“-insecure”參數,如圖:

在這裡插入圖片描述

補充:golang 配置私有倉庫

配置使用ssh 訪問的倉庫

1. go mod 根據go.mod拉取依賴庫時

會使用https的方式。為瞭方便我們也可以通過配置git 全局配置來使用 ssh的方式拉取依賴,下面是配置 https轉換為ssh的方式:

git config --global url."[email protected]:".insteadOf https://gitee.com/

2. 配置環境變量

來指定私有倉庫,用於不走代理的方式

go env -w GOPRIVATE=gitee.com

這裡配置私有倉庫是gitee

3. 設置代理

go env -w GOPROXY=goproyx.io

常見錯誤:

1. 錯誤一

[email protected] helloworld % go get -u gitee.com/abc/helloworld/v3 go: gitee.com/abc/helloworld/[email protected] requires gitee.com/abc/[email protected]: invalid version: git fetch -f origin refs/heads/*:refs/heads/* refs/tags/*:refs/tags/* in /Users/abc/developer/golang/pkg/mod/cache/vcs/742008abb4987f237c93efc5ddde7db6dd8d1841fe94aea076046d86a92e26a7: exit status 128: fatal: could not read Username for ‘https://gitee.com’: terminal prompts disabled

這種錯誤為沒有配置 git 的https轉換為 ssh

2. 錯誤二

go: gitee.com/abc/[email protected] requires gitee.com/abc/[email protected]/go.mod: verifying module: gitee.com/abc/[email protected]/go.mod: reading https://goproxy.io/sumdb/sum.golang.org/lookup/gitee.com/abc/[email protected]: 410 Gone server response: not found: gitee.com/abc/[email protected]: invalid version: git fetch -f origin refs/heads/*:refs/heads/* refs/tags/*:refs/tags/* in /tmp/gopath/pkg/mod/cache/vcs/742008abb4987f237c93efc5ddde7db6dd8d1841fe94aea076046d86a92e26a7: exit status 128: fatal: could not read Username for ‘https://gitee.com’: terminal prompts disabled

這種錯誤是GOPRIVATE 設置錯誤,使得go去驗證庫的sum

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。