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 .