像maven一样管理golang工程

3,061 阅读1分钟

golang 项目的包管理, 工程管理 问题个人觉得一直没有java里用maven来的爽快.

但经过对 go mod 的鼓捣, 发现, golang 也可以有点类似maven一样的管理工程. 而且更为简洁.

工作中, 一定会遇到, 想将一些通用代码抽取成一个模块, 供其他模块复用的想法.

比如, 我将工具性的方法, 集中到 core 模块中. 再来个 biz 模块, 引用 core 模块的方法.

怎么做?

方式一, 将 core push到GitHub上. 比如模块名定义为foo.com/core. 然后在 biz 中, go get foo.com/core , 这样 biz 中就可以像使用其他第三库一样使用自定义的模块了.

但是, 上述方式, 有缺陷: 1) 需要建远程仓库, commit, push, 打tag.(具体步骤介绍文章的很多); 2) 对于工作中的代码还是忌讳随便上传到GitHub上的(可以私有库, 但是不知道私有库是否可以用于go get, 我没有测试过).

方式二, 基于方式1的缺陷. 如果go module能够像java中的maven模块一样, install 到本地仓库. 然后, 其他模块引用. 这样就避免了麻烦和代码安全问题了. 步骤:

core 模块 go.mod

module foo.com/core

go 1.1

biz 模块 go.mod

module foo.com/biz

go 1.13
// require 配置, 可以不写, 利用编辑器自动导入生成
require foo.com/core v0.0.0
// 重点是replace重定向包的搜索路径
// 指定源码路径在上级目录下的 core/ 下面. 会自动找到 ../core/go.mod
// 默认下, go 会在http地址找, http://foo.com/core...
replace foo.com/core => ../core

如此, 就有了 maven 的既视感.

注意点: 模块名要类似路径的形式, 第一个段要带有., 即看起来像个域名. 否则报错, 说缺少 dot .