golang使用 gomodule 在公共测试环境管理go的依赖的实例详解

作者:xiaoliizi 时间:2024-04-26 17:35:41 

背景:调试服务最好的方式就是直接上机实践。对在公司的员工来说,在同一套服务上协同开发比在单独的环境上开发,应该会更有感觉。有问题可以一起发现并解决,也能够一同开发需求。
但是,公司的测试机往往是没办法连外网的,而golang 的大部分工程都需要直接从github 上下载依赖,这就导致 依赖文件需要先提前上传到开发机上。那么当开发机上需要运行多个golang 工程的时候,如何共享这些依赖,减少维护依赖库的工作量呢?

这也是需要大家协作完成的~

最终总结:项目采用 go module + vendor 模式,服务器上使用统一的GOPATH 路径。

一、go 工程配置

既然是协同开发,工程我们就建议使用 go module 对依赖包进行管理了。这样大家可以把依赖都放到统一的GOPATH,如果有新增依赖,直接放到GOPATH 目录即可。

关于go module 的介绍

1、初始化 go.mod 代码

在工程根目录中,执行 go mod init 工程的github地址,生成go.mod 文件。

示例:go mod init gitee.com/atamagaii/mygoproject

2、整理依赖

继续在当前目录,执行 go mod tidy,整理工程的依赖。
正常情况下,执行完成之后go.mod,并且会生成一个go.sum 文件。

golang使用 gomodule 在公共测试环境管理go的依赖的实例详解
golang使用 gomodule 在公共测试环境管理go的依赖的实例详解

期间可能会因为import 编写不规范,遇到一些报错,详见踩坑记录。

注意:go.mod 和 go.sum 文件都建议提交到git 上,这样在多人协同开发一个项目的时候,能保证依赖版本的统一。

3、保存项目依赖到 vendor 目录

直接执行 go mod vendor 即可
详细说明参考踩坑记录。

vendor 目录每次都可以在本地生成,因此不需要提交到git 上。

标准的工程目录如下:

golang使用 gomodule 在公共测试环境管理go的依赖的实例详解

二、服务器依赖管理

 1、上传所有依赖到服务器的GOPATH 目录

主要是 golang.org、github.com、gopkg.in 目录

2、编译工程

在自己工程的 src 目录,执行:
go build -o xxx xxx.go

三、踩坑记录。。

1、PuerkitoBio 踩坑

执行gobuild 之后报这个错误
go: github.com/PuerkitoBio/goquery@v1.5.1: reading github.com/PuerkitoBio/goquery/go.mod at revision v1.5.1: unknown revision v1.5.1
这个包不知道为啥,通过 go get 下载会自动进行依赖,并进行编译放到pkg 库。

解决方法:在开发环境,先通过 go mod vendor 指令将项目本身的直接依赖放到vendor目录。(这个目录就可以不用提交了)
生成效果:

golang使用 gomodule 在公共测试环境管理go的依赖的实例详解

然后将这个目录也放到服务器上,再执行:
go build -mod=vendor -o xxx xxx.go

在modules.txt 中的依赖会优先从vendor 目录中查找。

来源:https://blog.csdn.net/xiaoliizi/article/details/107051067

标签:golang,gomodule,go,依赖
0
投稿

猜你喜欢

  • Python使用urllib2模块抓取HTML页面资源的实例分享

    2022-11-14 13:32:50
  • python opencv进行图像拼接

    2022-09-10 16:13:01
  • thinkPHP框架通过Redis实现增删改查操作的方法详解

    2023-11-14 14:50:55
  • python仿抖音表白神器

    2023-03-15 03:35:56
  • Python通过tkinter实现百度搜索的示例代码

    2022-06-28 01:28:46
  • Python 连接字符串(join %)

    2021-01-13 23:30:46
  • jquery在vue脚手架中的使用方式示例

    2023-07-02 17:07:49
  • Asp用分页符实现长文章分页

    2007-10-19 18:35:00
  • python处理圆角图片、圆形图片的例子

    2021-06-08 15:20:15
  • 浅析php header 跳转

    2023-10-15 04:18:34
  • MySQL数据库中表的操作详解

    2024-01-26 20:37:27
  • OpenCV3.0+Python3.6实现特定颜色的物体追踪

    2021-05-13 09:01:03
  • python实现图片转字符画

    2021-02-13 22:58:33
  • OpenCV停车场车位实时检测项目实践

    2022-09-13 09:37:08
  • 用python写扫雷游戏实例代码分享

    2023-03-31 05:12:38
  • Python程序中使用SQLAlchemy时出现乱码的解决方案

    2022-11-07 23:19:28
  • 如何用python批量调整视频声音

    2023-10-14 06:51:57
  • Sql Server 2012 转换函数的比较(Cast、Convert和Parse)

    2012-08-21 10:21:40
  • javascript操作table(insertRow,deleteRow,insertCell,deleteCell方法详解)

    2024-04-16 09:14:08
  • Python常见错误:IndexError: list index out of range解决

    2021-02-17 21:53:10
  • asp之家 网络编程 m.aspxhome.com