如何从 Dep 迁移到 Go 模块

How do I migrate from Dep to Go Modules

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

如何迁移?

从 Dep 迁移到 Go Modules 非常简单。

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

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

如果您想保留供应商文件夹:

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

添加到@Nicholas 的回答:

Here 来自官方 golang 文档:

要为现有项目创建 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 file or from any of the other nine total supported dependency formats 转换而来,添加 require 语句以匹配现有的配置。

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

$ go test all

另一种升级到 mod规则的方法。

  • 删除Gopkg.toml和Gopkg.lock

    rm Gopkg.*

  • 初始化 Go mod规则

    GO111MODULE=on go mod init

  • 运行 go mod 整理所有间接 mod 规则并删除未使用的 mod 规则

    GO111MODULE=on go mod tidy

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

    go build

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