乐趣区

关于golang:如何将含有多个main子项目的大项目mod化

以 xxx-go-eninge(图片中有打码) 为例,我的项目中蕴含 5 个子我的项目,2 个公共类,如下图,

红色框选即便公共模块

其它都是独立的子项目,有 main.go

咱们将这个我的项目放在任意文件夹,是否在 GOPATH 都能够

如果这个我的项目不做任何配置,那么在任意目录下执行 go get 或 build 都会失败。

当初操作步骤如下

  1. 将我的项目根目录退出到 GOPATH 中,如图红圈中,Project 级别的 GOPATH 即可,同时选中上面的索引 GOPATH

    这么做的目标是为了将以后大我的项目的目录变成一个独立的 gopath 的环境,外面有 src、pkg、bin,免得净化 Global GOPATH
    PS: 这个我的项目放在那里都能够,没有必须放在 Global GOPATH 的要求

  2. 启动控制台
  3. 先执行 go env 查看 GOPATH 门路是否正确,正确的话会蕴含我的项目根目录和零碎环境中的 GOPATH
    没有蕴含也没关系,点击上图中 Local 左边的 + 号,此时新建的控制台中应该就是正确的环境变量了
  4. cd 到每个子模块的目录顺次执行,公共模块优先,
    比方 cd 到 xxxEngine 那层目录

    go mod init  
    go get -insecure  
      
    # 应用 -inisecure 的起因是咱们的公有库无奈 verify  
    # 报错能够先不理
  5. 如果 tools 目录下没有 go 文件,所以无奈 mod,而它的子目录中有,须要别离在 cd 到每个子目录下新建 mod,比方 tools/util 目录,module 名为 tools/util
  6.  此时每个子模块下会生成 go.mod 文件,文件中会 require 以后模块的所有依赖模块
  7. 比方运行 xxxEngine 时,因为依赖项的问题,执行会报错,比方报错的内容大抵为:xxxConfig 找不到的谬误 ,因为 xxxConfig 是并非线上模块,此时须要关上 xxxEngine/go.mod 文件
    最重要的步骤

    增加如上信息

    require xxxConfig v0.0.0  
    replace xxxConfig => ../xxxConfig  
      
    # 通过相对路径的形式,将专用模块引入,此时便不会再报错 
  8. 如果遇到谬误,屡次执行 go get -insecure 而后执行 7 的步骤,增加相应依赖,直到没有谬误为止,
  9.  如上操作,所有子目录都做成了独自的模块,每个含有 go.mod 的模块能够失常的 go build 编译(公共模块无需编译),能够应用 GoLand 配置每个我的项目的独自的运行 / 调试


    图中 Run Kind 抉择为 目录 Directory,而后如图设置对应的执行目录、输入目录即可

  10. 如图能够看到 pkg 目录存储了以后我的项目的缓存文件,并不会净化其它环境
    而每个子目录下的 go.mod 将以后文件夹变成了一个模块

退出移动版