」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 輕鬆管理和安裝您的私人 Go 模組

輕鬆管理和安裝您的私人 Go 模組

發佈於2024-08-23
瀏覽:289

Easily manage and install your private Go modules

對於 Golang 開發人員來說,在處理公共儲存庫時管理和安裝 Go 模組通常很簡單。然而,當您需要使用私有 Go 模組時,事情會變得更加棘手。

除了使用私有 GOPROXY 之外,Go 模組工具鏈不提供用於處理私有模組的內建機制,且正確設定和維護工具鏈並不是每個開發人員或組織都可以選擇的。有些套件儲存庫服務支援使用私有 Go 模組,但通常不會為開發人員提供最乾淨的體驗。

因此,在大多數情況下,我們最終會安排複雜的Git 配置(.netrc 或.gitconfig)與一些Go 環境變數結合,以在使用go get、go install 或go mod download 時管理我們的私有儲存庫的身份驗證.

這些 Git 配置的問題在於,它們並非對所有開發人員來說都是顯而易見的,而且它們可能不安全,因為可能需要在檔案系統中儲存純文字憑證。當配置 CI/CD 系統、建置 Docker 映像等時,這些問題變得更加成問題

介紹 goproxy.dev

作為長期的 Golang 開發人員(來自 Go 模組甚至不存在的時代),我們一直夢想著有一天,使用私人 Go 庫將像使用公共庫一樣簡單且強大。

想像一下,開發您的私人 Go 庫並將其推送到 GitHub,然後僅透過設定 GOPROXY 環境變數即可立即從專案原始碼中取得新變更。沒有棘手且不安全的 Git 配置,沒有自架 GOPROXY 維護,沒有複雜且容易出錯的發布工作流程,且本地開發機器、Dockerfile 和 CI/CD 環境的設定相同。

向 goproxy.dev 打個招呼,這是一個與 GitHub 整合的私人 GOPROXY 服務,為您提供無縫 Go 私人模組安裝

如何在開發工作流程中設定 goproxy.dev

只需使用您的 GitHub 帳戶登入 goproxy.dev,授予您將使用的私人儲存庫的存取權限,然後匯出您的 GOPROXY 和 GONOSUMDB 環境變數。

export [email protected],proxy.golang.org,direct
export GONOSUMDB=github.com/your-organization

這些 Go 環境變數可以直接從 shell 配置(.zshrc、.bashrc 等)或使用 go env -w 設定。

然後您可以執行常用的 go 命令來安裝和下載您的私人模組。

go get github.com/your-organization/[email protected]
go install github.com/your-organization/go-module/cmd
...
go mod download

如何使用 goproxy.dev 建置 Docker 映像

與goproxy.dev整合只需要設定兩個環境變數。在 Docker 建置期間執行此操作的最佳方法是使用 Docker 建置機密功能。

在你的 Dockerfile 中:

COPY go.mod go.sum ./
RUN --mount=type=secret,id=GOPROXY \
    GOPROXY=$(cat /run/secrets/GOPROXY) \
    GONOSUMDB=github.com/your-organization \
    go mod download
RUN go build .

然後運行:

GOPROXY="[your GOPROXY value]" docker build --secret id=GOPROXY

如何使用 GitHub Actions 中的 goproxy.dev

只需為包含 GOPROXY URL 的 GitHub Actions 配置一個秘密,並在工作流程中使用它:

jobs:
  build:
    - run: |
        go mod download
        go build .
      env:
        GOPROXY: ${{ secrets.PRIVATE_GOPROXY }}
        GONOSUMDB: github.com/your-organization

 立即簡化您的 Go 開發工作流程

透過 goproxy.dev,您在使用 Go 函式庫時將獲得最佳的開發人員體驗。無論您依賴開源公共庫還是組織中的私有模組,您都將擁有統一的工作流程:設定 GOPROXY 環境變量,並取得特定版本、Git 分支或提交的依賴項。

立即註冊我們的 14 天免費試用版,以了解更多資訊並開始使用 goproxy.dev。

版本聲明 本文轉載於:https://dev.to/goproxydev/easily-manage-and-install-your-private-go-modules-g74?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • \“(1)vs.(;;):編譯器優化是否消除了性能差異?\”
    \“(1)vs.(;;):編譯器優化是否消除了性能差異?\”
    答案: 在大多數現代編譯器中,while(1)和(1)和(;;)之間沒有性能差異。編譯器: perl: 1 輸入 - > 2 2 NextState(Main 2 -E:1)V-> 3 9 Leaveloop VK/2-> A 3 toterloop(next-> 8 last-> 9 ...
    程式設計 發佈於2025-07-18
  • 對象擬合:IE和Edge中的封面失敗,如何修復?
    對象擬合:IE和Edge中的封面失敗,如何修復?
    To resolve this issue, we employ a clever CSS solution that solves the problem:position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%)...
    程式設計 發佈於2025-07-18
  • 如何克服PHP的功能重新定義限制?
    如何克服PHP的功能重新定義限制?
    克服PHP的函數重新定義限制在PHP中,多次定義一個相同名稱的函數是一個no-no。嘗試這樣做,如提供的代碼段所示,將導致可怕的“不能重新列出”錯誤。 但是,PHP工具腰帶中有一個隱藏的寶石:runkit擴展。它使您能夠靈活地重新定義函數。 runkit_function_renction_...
    程式設計 發佈於2025-07-18
  • 如何將來自三個MySQL表的數據組合到新表中?
    如何將來自三個MySQL表的數據組合到新表中?
    mysql:從三個表和列的新表創建新表 答案:為了實現這一目標,您可以利用一個3-way Join。 選擇p。 *,d.content作為年齡 來自人為p的人 加入d.person_id = p.id上的d的詳細信息 加入T.Id = d.detail_id的分類法 其中t.taxonomy ...
    程式設計 發佈於2025-07-18
  • 如何使用組在MySQL中旋轉數據?
    如何使用組在MySQL中旋轉數據?
    在關係數據庫中使用mySQL組使用mySQL組進行查詢結果,在關係數據庫中使用MySQL組,轉移數據的數據是指重新排列的行和列的重排以增強數據可視化。在這裡,我們面對一個共同的挑戰:使用組的組將數據從基於行的基於列的轉換為基於列。 Let's consider the following ...
    程式設計 發佈於2025-07-18
  • 如何避免Go語言切片時的內存洩漏?
    如何避免Go語言切片時的內存洩漏?
    ,a [j:] ...雖然通常有效,但如果使用指針,可能會導致內存洩漏。這是因為原始的備份陣列保持完整,這意味著新切片外部指針引用的任何對象仍然可能佔據內存。 copy(a [i:] 對於k,n:= len(a)-j i,len(a); k
    程式設計 發佈於2025-07-18
  • 如何使用PHP從XML文件中有效地檢索屬性值?
    如何使用PHP從XML文件中有效地檢索屬性值?
    從php $xml = simplexml_load_file($file); foreach ($xml->Var[0]->attributes() as $attributeName => $attributeValue) { echo $attributeName,...
    程式設計 發佈於2025-07-18
  • Go語言垃圾回收如何處理切片內存?
    Go語言垃圾回收如何處理切片內存?
    Garbage Collection in Go Slices: A Detailed AnalysisIn Go, a slice is a dynamic array that references an underlying array.使用切片時,了解垃圾收集行為至關重要,以避免潛在的內存洩...
    程式設計 發佈於2025-07-18
  • 為什麼我在Silverlight Linq查詢中獲得“無法找到查詢模式的實現”錯誤?
    為什麼我在Silverlight Linq查詢中獲得“無法找到查詢模式的實現”錯誤?
    查詢模式實現缺失:解決“無法找到”錯誤在Silverlight應用程序中,嘗試使用LINQ建立LINQ連接以錯誤而實現的數據庫”,無法找到查詢模式的實現。”當省略LINQ名稱空間或查詢類型缺少IEnumerable 實現時,通常會發生此錯誤。 解決問題來驗證該類型的質量是至關重要的。在此特定實例...
    程式設計 發佈於2025-07-18
  • 同實例無需轉儲複製MySQL數據庫方法
    同實例無需轉儲複製MySQL數據庫方法
    在同一實例上複製一個MySQL數據庫而無需轉儲在同一mySQL實例上複製數據庫,而無需創建InterMediate sqql script。以下方法為傳統的轉儲和IMPORT過程提供了更簡單的替代方法。 直接管道數據 MySQL手動概述了一種允許將mysqldump直接輸出到MySQL cli...
    程式設計 發佈於2025-07-18
  • 版本5.6.5之前,使用current_timestamp與時間戳列的current_timestamp與時間戳列有什麼限制?
    版本5.6.5之前,使用current_timestamp與時間戳列的current_timestamp與時間戳列有什麼限制?
    在時間戳列上使用current_timestamp或MySQL版本中的current_timestamp或在5.6.5 此限制源於遺留實現的關注,這些限制需要對當前的_timestamp功能進行特定的實現。 創建表`foo`( `Productid` int(10)unsigned not ...
    程式設計 發佈於2025-07-18
  • 如何在鼠標單擊時編程選擇DIV中的所有文本?
    如何在鼠標單擊時編程選擇DIV中的所有文本?
    在鼠標上選擇div文本單擊帶有文本內容,用戶如何使用單個鼠標單擊單擊div中的整個文本?這允許用戶輕鬆拖放所選的文本或直接複製它。 在單個鼠標上單擊的div元素中選擇文本,您可以使用以下Javascript函數: function selecttext(canduterid){ if(d...
    程式設計 發佈於2025-07-18
  • MySQL中如何高效地根據兩個條件INSERT或UPDATE行?
    MySQL中如何高效地根據兩個條件INSERT或UPDATE行?
    在兩個條件下插入或更新或更新 solution:的答案在於mysql的插入中...在重複鍵更新語法上。如果不存在匹配行或更新現有行,則此功能強大的功能可以通過插入新行來進行有效的數據操作。如果違反了唯一的密鑰約束。 實現所需的行為,該表必須具有唯一的鍵定義(在這種情況下為'名稱'...
    程式設計 發佈於2025-07-18
  • 用戶本地時間格式及時區偏移顯示指南
    用戶本地時間格式及時區偏移顯示指南
    在用戶的語言環境格式中顯示日期/時間,並使用時間偏移在向最終用戶展示日期和時間時,以其localzone and格式顯示它們至關重要。這確保了不同地理位置的清晰度和無縫用戶體驗。以下是使用JavaScript實現此目的的方法。 方法:推薦方法是處理客戶端的Javascript中的日期/時間格式化和...
    程式設計 發佈於2025-07-18
  • 如何檢查對像是否具有Python中的特定屬性?
    如何檢查對像是否具有Python中的特定屬性?
    方法來確定對象屬性存在尋求一種方法來驗證對像中特定屬性的存在。考慮以下示例,其中嘗試訪問不確定屬性會引起錯誤: >>> a = someClass() >>> A.property Trackback(最近的最新電話): 文件“ ”,第1行, AttributeError: SomeClass...
    程式設計 發佈於2025-07-18

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3