44

I'm currently using Dep and would like to start using Go modules.

How do I migrate?

4

3 回答 3

76

从 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. (可选)删除您的供应商文件夹(rm -rf vendor/或移至垃圾箱)
  6. go build: 做一个测试构建,看看它是否有效。
  7. rm -f Gopkg.lock Gopkg.toml:删除用于Dep的过时文件。

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

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

  1. 运行go mod vendor以将您的依赖项复制到供应商文件夹中。
  2. 运行go build -mod=vendor以确保go build使用您的供应商文件夹。
于 2019-04-13T10:49:15.447 回答
5

要添加到@Nicholas 的答案:

是来自官方的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 文件或从其他九种受支持的依赖格式中的任何一种转换,添加 require 语句以匹配现有配置。

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

$ go test all
于 2019-04-14T08:00:49.743 回答
2

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

  • 删除 Gopkg.toml 和 Gopkg.lock

    rm Gopkg.*

  • 初始化 Go 模块

    GO111MODULE=on go mod init

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

    GO111MODULE=on go mod tidy

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

    go build

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

于 2019-11-20T06:12:58.953 回答