Go Module with private github repository

今天用 go mod download 想下載新專案的依賴的時候一直遇到一個錯誤

go: github.com/your-repo/your-kit@v0.1.0: reading github.com/your-repo/your-kit/go.mod at revision v0.1.0: unknown revision v0.1.0

這是因為我們有使用到一些私有repo 上面的 library,然後我們沒有給權限,所以在使用 go mod download 無法成功抓取,就出現這樣的訊息了。這邊需要做下面這個流程就可以成功了

  1. 因為 go mod 其實底層是呼叫 git 的指令來做事情,所以我們必須給 git 有 http 的權限可以讀取私有的 github repository
  2. Github 是有提供一種叫 person access token 讓你可以用這個 token 不須輸入帳號密碼就可以讀取私有的 repo 了,所以我們需要先申請一個 token,流程可以參考這邊
  3. 當你拿到 token 之後,應該可以先透過這個指令試試看,理論上應該要可以成功下載
git clone https://<token>@github.com/<your-repo>/<your-kit>.git
  1. 因為 go mod 預設會透過 proxy.golang.org 去抓資料,但因為我們是 private repo, 所以我們需要指定某些 url 開頭的都不走這條路, 這樣只要是 github.com/your-repo/logkit 或是 github.com/your-repo/config-kit 這些都不會透過 proxy 走了,而是直接讀取
go env -w GOPRIVATE=github.com/<your-repo>/*
  1. 接下來我們需要把剛剛拿到 person access token 設定到 git config 裡面就好了
git config --global url."https://<token>@github.com".insteadOf "https://github.com"

這邊是比較要留意的地方,這邊只需要給 token, 不需要給 username

如果需要清楚 go module cache 可以透過
go clean -modcache

要檢查 git config, 可以透過

git config --global --edit