如何从 Dep 迁移到 Go 模块



我目前正在使用 Dep,想开始使用 Go 模块。

如何迁移?

从 Dep 迁移到 Go 模块非常简单。

  1. 运行go version并确保使用的是 Go 版本 1.11 或更高版本。
  2. 将您的代码移出 GOPATH 或设置export GO111MODULE=on
  3. go mod init [module path]:这将从 Gopkg.lock 导入依赖项。
  4. go mod tidy:这将删除不必要的导入,并添加间接导入。
  5. (
  6. 可选)删除供应商文件夹(rm -rf vendor/或移至废纸篓)
  7. go build:做一个测试构建,看看它是否有效。
  8. rm -f Gopkg.lock Gopkg.toml: 删除用于 Dep 的过时文件。

Go 通过读取 Dep 文件从 Dep 导入了我的依赖项Gopkg.lock并创建了一个go.mod文件。

如果要保留供应商文件夹:

  1. 运行go mod vendor以将依赖项复制到供应商文件夹中。
  2. 运行go build -mod=vendor以确保go build使用您的供应商文件夹。

添加到@Nicholas答案中:

以下是官方的戈朗文档:

要为现有项目创建 go.mod

  1. 导航到 GOPATH 外部模块源树的根目录:
$ export GO111MODULE=on                         # manually active module mode
$ cd $GOPATH/src/<project path>                 # e.g., cd $GOPATH/src/you/hello
  1. 创建初始模块定义并将其写入 go.mod 文件:
$ go mod init      

此步骤从任何现有的 dep Gopkg.lock 文件或从其他九种总共支持的依赖项格式中的任何一种进行转换,并添加 require 语句以匹配现有配置。

  1. 构建模块。当从模块的根目录执行时,./...模式匹配当前模块中的所有包。Go Build 将根据需要自动添加缺失或未转换的依赖项,以满足此特定构建调用的导入:
$ go build ./...
  1. 按配置测试模块,以确保它适用于所选版本:
$ go test ./...
  1. (可选)运行模块的测试以及所有直接和间接依赖项的测试以检查不兼容性:

$ go test all

升级到模块的另一种方法。

  • 删除 Gopkg.toml 和 Gopkg.lock

    rm Gopkg.*

  • 初始化 Go 模块

    GO111MODULE=on go mod init

  • 运行 go mod tidy 以拉取所有间接模块并删除未使用的模块

    GO111MODULE=on go mod tidy

  • 运行构建以确保一切正常

    go build

提示如果您遇到一些未找到的模块,请手动更新 go.mod 文件中的模块标签。

最新更新