Go Module 教程:使用 GitHub 私有倉庫

在本文中,我們將討論 go 模塊的基本用法,如何創建自己的 go 模塊以及如何在自己的 go 項目中包含安全的 go 模塊。我們主要關注的是私有 git 存儲庫。

模塊極大地提高了 go 代碼的可維護性。就像 Java 應用程序中的 Maven 一樣,它是 go 語言中的依賴項管理。如果您不熟悉 go 中的模塊,請單擊 這裏 獲取官方文檔。

創建自己的 go 模塊

在 Java 中,工件在 Nexus 之類的存儲庫中維護。同樣,我們可以在 Git 或 Bitbucket 上託管自己的 go 模塊。我們的在 Github 託管。

必須爲 GoLang 正確設置所有與環境有關的內容。否則,它將無法正常工作。

切換到一個目錄並按名稱 common-module 創建文件夾

mkdir common-module
cd common-module

用一個名字初始化項目中的 Go 模塊。這裏的名字格式如下

<hosting-site>/<repository>/<module>

Go 模塊的名稱將爲 "github.com/ereshzealous/common-module"

go mod init github.com/ereshzealous/common-module

讓我們創建一個 commons 包,並編寫一個帶有幾個示例函數的簡單 go 文件。

package common

// GetCommonData a method
func GetCommonData() string {
    return "Common Data"
}

func GetData() string {
    return "Data"
}

現在繼續,將 GitHub 中的 go 模塊發佈到一個版本。單擊下面突出顯示的一個,這會將您的 GIT 提交發布爲公開狀態。要了解如何發佈 GIT 存儲庫,請單擊 此處

如果將此模塊導入到您的 go 文件中,則函數是可見的,因爲存儲庫尚未受限制。現在,將存儲庫從公有移動到私有。

開發者環境

讓我們使用 go get 命令獲取通用模塊。您將看到 410 Gone 錯誤消息。

錯誤信息

要解決上述問題並在 go 應用程序中包含私有模塊,需要兩個步驟。

  1. 通過 Go Mod 代理網站

這是因爲,就像 Maven default repo, Go 也有一個模塊的代理站點 (https://proxy.golang.org,direct).

因爲我們已在 GitHub 中發佈了,所以我們必須提供一種繞過私有存儲庫代理站點的機制。可以使用 GOPRIVATE 實現。

新的環境變量 [GOPRIVATE](https://golang.org/cmd/go/#hdr-Module_configuration_for_non_public_module) 環境變量指示不可公開的模塊路徑。它是較低級別的 GONOPROXYGONOSUMDB 兩個變量的默認值,這兩個變量提供了對通過代理獲取哪些模塊並使用校驗和數據庫進行驗證的更細粒度的控制。

在如下所示開發環境中設置 GOPRIVATE。多個值用逗號分隔。下面我已經設置爲我的帳戶級別,我們也可以設置爲存儲庫級別,如 github.com/ereshzealous/common-module

go env -w GOPRIVATE=github.com/ereshzealous

2. 在構建期間將存儲庫憑證傳遞給 Go 模塊

當我們使用 Github 時,我們必須在構建過程中提供 auth 令牌。在開發環境中,它是直截了當的。我們有一個 git 命令可以做到這一點,即在 gitconfig 文件中添加一個條目。必須傳遞格式化的 URL,以便在構建過程中評估憑據。

Note: Auth 令牌必須是 URL 編碼的。

單擊 此處 轉到 GitHub 訪問令牌。創建具有適當權限的用戶。創建一個新令牌或使用現有令牌。

生成令牌後,請執行以下命令。

Github

git config --global url."https://${username}:${access_token}@github.com".insteadOf /
"https://github.com"

Bitbucket

在 Bitbucket 中,創建訪問令牌並執行以下命令。

git config --global url."https://${bitbucket_user_id}:${bitbucket_access_token}@privatebitbucket.com".insteadOf 
  "https://privateaccount.com"

在 gitconfig 中設置以上內容之後,讓我們嘗試再次獲取 go 模塊。

這適用於開發環境,CI/CD 或 docker 容器如何呢。

Docker

幸運的是,我們可以在 Docker file 中這樣做。下面是我們的方法。

# Start from the latest golang base image
FROM golang:alpine

RUN GOCACHE=OFF

RUN go env -w GOPRIVATE=github.com/ereshzealous

# Set the Current Working Directory inside the container
WORKDIR /app

# Copy everything from the current directory to the Working Directory inside the container
COPY . .

RUN apk add git

RUN git config --global url."https://golang:<access-token>@github.com".insteadOf "https://github.com"

# Build the Go app
RUN go build -o main .

# Expose port 8080 to the outside world
EXPOSE 8080

#ENTRYPOINT ["/app"]

# Command to run the executable
CMD ["./main"]

第 6 行

將 GOPRIVATE 設置爲存儲庫。

第 17 行

gitconfig 設置了訪問令牌和用戶名。這會將憑證傳遞給 Go Mod。至此,我們在 docker 中有了 git image。

讓我們看看 docker 執行的控制檯。

Docker 快照

Pvt 是一個私有存儲庫。

本文中的所有譯文僅用於學習和交流目的,轉載請務必註明文章譯者、出處、和本文鏈接
我們的翻譯工作遵照 CC 協議,如果我們的工作有侵犯到您的權益,請及時聯繫我們。

原文地址:https://medium.com/swlh/go-modules-with-...

譯文地址:https://learnku.com/go/t/47596

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://learnku.com/go/t/47596