Golang中如何在离线环境下使用GitHub包

Golang中如何在离线环境下使用GitHub包 我只能通过虚拟机上网。 并且在离线环境中进行Go语言开发。 此时,我需要从GitHub获取一个项目并在离线状态下使用,但我不知道该如何操作。 请帮助我。

8 回复

你只需要在联网时下载所有依赖项。

更多关于Golang中如何在离线环境下使用GitHub包的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


包被下载到 GOPATH。 你可以同时导入并使用 go.mod 文件和 go.sum 文件。

在虚拟机中从GitHub下载项目并构建它。 所需的包随后会存储在GOPATH中。 将上述包复制到离线环境的GOPATH后,构建项目。

我需要在离线环境下进行Go语言项目开发。目前,我只能通过虚拟机(VM)访问互联网。但是,我想从GitHub上获取一个项目,并将其用于离线的开发目的。遗憾的是,我不太清楚实现这一目标的具体步骤。

如果您想下载依赖项并将其检入,您可能也在寻找 go mod vendor 命令:

图片

Go Modules 参考 - Go 编程语言

图片

  1. 下载项目

    • 在有网络连接的机器上,访问您要下载项目的GitHub仓库。
    • 使用“Clone or Download”按钮获取仓库URL。
  2. 将项目传输到您的虚拟机

    • 如果您的虚拟机没有直接网络连接,请使用如 scp(安全复制协议)等方法将项目及其文件传输到您的虚拟机。
  3. 下载依赖项

    • 在有网络连接的机器上,使用 go get 命令下载项目所需的所有依赖项。此命令也会下载项目本身。
    go get -u github.com/username/project
    
    • github.com/username/project 替换为项目的实际URL。
  4. 将依赖项传输到您的虚拟机

    • 依赖项下载完成后,您需要将它们传输到您的虚拟机。这可能涉及将它们压缩成ZIP文件并使用 scp 进行传输。
  5. 设置您的开发环境

    • 确保您的虚拟机上已安装Go。
  6. 构建并运行项目

    • 导航到项目目录并使用 go build 命令编译项目。
    go build
    
    • 运行编译后的二进制文件。
    ./your_program
    

离线使用 GitHub 包需要一些准备和配置。以下是设置步骤的详细指南:

  1. 下载包: 首先,确保您能够访问想要离线使用的 GitHub 包。这可以通过在您在线时从 GitHub 下载该包及其依赖项来实现。将包保存在本地计算机的一个目录中。

  2. 创建本地包仓库: 接下来,需要在您的计算机上设置一个本地包仓库。您可以使用像 Node.js 包的 “npm” 或 Python 包的 “pip” 这样的包管理器来创建仓库。例如,如果您想创建一个本地的 npm 包仓库:

    • 安装 verdaccio:Verdaccio 是一个私有的 npm 注册表,可以在本地设置
    • 配置 verdaccio:将其指向您保存已下载 npm 包的目录。
    • 启动 verdaccio:运行 verdaccio 服务器,它将作为您的本地 npm 注册表。
  3. 配置包管理器: 更新您的包管理器配置,以使用您的本地仓库作为包的来源。对于 npm,您可以使用以下命令:

    npm config set registry http://localhost:4873/
    

    http://localhost:4873/ 替换为适合您本地仓库的 URL。

  4. 离线安装包: 现在您的包管理器已配置好,您可以像在线时一样安装包,但这次它将从您的本地仓库获取。例如,要安装一个 npm 包:

    npm install package-name
    

    包管理器将在您的本地仓库中查找该包并从那里安装。

  5. 处理更新: 如果您想更新一个包,您需要重复从 GitHub 下载更新后的包及其依赖项并将其添加到本地仓库的过程。

在离线环境下使用GitHub包,可以通过以下步骤实现:

  1. 在联网环境中下载依赖包 在虚拟机中,使用 go mod vendor 命令将依赖包缓存到本地vendor目录,或使用 go mod download 下载所有依赖到模块缓存。

    # 在项目目录中执行
    go mod vendor
    

    # 下载所有依赖到模块缓存
    go mod download
    
  2. 复制整个项目到离线环境 将项目目录(包括vendor文件夹或模块缓存)完整复制到离线开发环境中。

  3. 在离线环境中配置Go模块代理为offline模式 设置 GOPROXY=off 环境变量,强制Go使用本地缓存的模块。

    export GOPROXY=off
    

    或在Go 1.13+中,可以直接在go.mod文件中设置:

    // go.mod
    module your-project
    
    go 1.16
    
    // 添加以下行
    replace github.com/some/dependency => ./vendor/github.com/some/dependency
    
  4. 使用本地vendor目录构建 在离线环境中,使用 -mod=vendor 标志来确保使用本地vendor依赖:

    go build -mod=vendor
    
  5. 完整示例流程

    # 联网环境(虚拟机)中
    cd /path/to/project
    go mod init example.com/project
    go get github.com/username/repo@v1.2.3
    go mod vendor
    
    # 将整个项目目录复制到离线环境
    
    # 离线环境中
    export GOPROXY=off
    cd /offline/path/to/project
    go build -mod=vendor
    
  6. 如果使用模块缓存替代vendor

    # 联网环境中获取缓存路径
    go env GOMODCACHE
    
    # 复制整个模块缓存目录到离线环境相同路径
    
    # 离线环境中设置GOPROXY=direct
    export GOPROXY=direct
    

注意:确保离线环境的Go版本与联网环境一致,避免模块兼容性问题。

回到顶部