三步将 Go 语言旧的项目迁移到新的 go mods

yufei       2 月, 4 周 前       358

声明,本文是对 Migrating to go mod in just 3 steps 的翻译,并加上了一些自己的文字

好久没有跟 Go 语言 相关的任何文章了。一方面最近实在没空,另一方面,Go 语言最近动作比较少,唯一的更新还是比较小的 bug 修复的更新。

go mods 出来已经好久了,想必大家都用上了吧? 会用了么?

在这个帖子中,我并不打算枚举列出使用 go modules 进行依赖管理的好处,因为互联网上有很多帖子,因为我之前也已经介绍过了,更因为,这个是一个必然的选择。

我们今天来聊聊另一个话题,如何把旧的项目迁移到新的 go mods 解决方案上。

1_a-NrrpFPmj-_JQGulalCdQ.png

迁移看起来很复杂,但如果你对 go mods 比较熟悉,迁移过程还是比较简单的。小编在这里归纳下,总的来说,就是简单三步

安装最新的 Golang 版本

你可能会有疑问,为什么需要安装最新的版本?

这是因为我们都是软件爱好者,我们应该希望测试最新技术

顺便说一句,你可以使用 golang 1.11.X,但你应该想知道为什么不使用最新版本...

为此,你可以访问我们的 Go 语言环境配置 并安装最新的 1.11.2 版本

找到一个需要迁移到 go modules 的旧项目

我们以一个不久前才完成的一个个人的旧项目 mollydb 为例,介绍如何迁移到 go modules 。

在这个旧项目中,我使用了 Glide 来管理依赖

你不必纠结于具体项目,实际上我们介绍的方法适用于任何项目

这个项目看起来有点庞大,但实际上,你不要担心不理解 mollydb 的功能和作用,因为我们只需要了解如何迁移现有项目即可。

你可以在命令行或 shell 中运行下面的命令来拉取和迁出项目

git clone https://github.com/wesovilabs/mollydb.git
cd mollydb; 
git checkout -b feature/using-go-mods

调整项目结构

首先要做的,就是调整现有的项目结构。当前的目录结构如下

src > mollydb > vendors

简单来说,就是

  1. 所有 Go 语言源代码都放在 src 目录中

  2. src 目录包含两个子目录,一个是我们的项目目录 mollydb、另一个是相关工具目录 tools

    ls src
    mollydb tools
    
  3. mollydb 目录下包含了第三方依赖,这些依赖都放在 vendors 目录中,并以每一个依赖的提供商进行分类

    ls src/mollydb/vendor
    github.com  golang.org  gopkg.in
    

在旧的 GOPATH 模式下,这种目录结构是唯一可以摆脱 GOPATH 依赖的方式。

但在新的 go modules 模式下,这种结构肯定是不适合的,也没必要。

而我们所要做的,就是移除 src/mollydb/vendor 目录,并把 src/mollydb 目录下的所有内容移到项目的跟目录

相关的命令如下

rm -rf src/mollydb/vendor
mv src/mollydb/* .

然后,我们接下来要做的就是运行 go mod init mollydb 来初始化 go modules 配置文件

这个命令足够智能,它会自动帮我们将 glide.lock 中的依赖项复制到 go.mod 文件中,并下载它们

go mod init mollydb
go: creating new go.mod: module mollydb
go: copying requirements from glide.lock

万恶的长城,我本地安装依赖失败了...不过没关系,你影响本文接下来的部分

然后,我们就可以看到 go.mod 文件中的内容如下

module mollydb
require (
  github.com/boltdb/bolt v0.0.020180302180052-fd01fc79c553
  github.com/fsnotify/fsnotify v1.4.7
  github.com/go-yaml/yaml v0.0.020140922213225-bec87e4332ae
  github.com/graphql-go/graphql v0.0.0201803242146528ab5400ff77c
  github.com/graphql-go/handler v0.0.020180312211735-df717460db9a
  github.com/graphql-go/relay v0.0.02017120813404354350098cfe5
  golang.org/x/net v0.0.0201803200021176078986fec03
  golang.org/x/sys v0.0.02018031819084701acb38716e0
  gopkg.in/yaml.v2 v2.1.1
)

接着,我们就可以删除任何跟 glide 相关的内容,并且执行下面的命令来清理下项目,删除不必要的垃圾文件

go mod init mollydb
go mod tidy

上面这些命令会导致 go.mod 文件被重新创建,因为 go mod 命令会检查我们的 Go 源文件,并从源文件中找到依赖项并安装它们

module mollydb
require (
  github.com/fsnotify/fsnotify v1.4.7
  github.com/go-chi/chi v3.3.3+incompatible
  github.com/graphql-go/graphql v0.7.7
  github.com/graphql-go/handler v0.2.2
  github.com/graphql-go/relay v0.0.02017120813404354350098cfe5
  github.com/kr/pretty v0.1.0 // indirect
  github.com/sirupsen/logrus v1.2.0
  github.com/stretchr/testify v1.2.2
  golang.org/x/net v0.0.020181217023233-e147a9138326 // indirect
  golang.org/x/text v0.3.0 // indirect
  gopkg.in/yaml.v2 v2.2.2
)

最后,我们可以运行下面的命令来检查项目迁移是否成功

go run main.go

不出意外,一切都很顺利的。

怎么样? 迁移看起来是不是很简单?

目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2018 简单教程 twle.cn All Rights Reserved.