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

 更新时间:2020年11月23日 10:35:11   作者:xiaoliizi  
这篇文章主要介绍了golang使用 gomodule 在公共测试环境管理go的依赖,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

背景:调试服务最好的方式就是直接上机实践。对在公司的员工来说,在同一套服务上协同开发比在单独的环境上开发,应该会更有感觉。有问题可以一起发现并解决,也能够一同开发需求。
但是,公司的测试机往往是没办法连外网的,而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 文件。

go.mod 文件
go.sum 文件

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

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

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

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

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

标准的工程目录如下:

在这里插入图片描述

二、服务器依赖管理

 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目录。(这个目录就可以不用提交了)
生成效果:

在这里插入图片描述

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

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

到此这篇关于golang使用 gomodule 在公共测试环境管理go的依赖的实例详解的文章就介绍到这了,更多相关golang在公共测试环境管理go的依赖内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一文带你了解Go语言标准库strings的常用函数和方法

    一文带你了解Go语言标准库strings的常用函数和方法

    strings 库包含了许多高效的字符串常用操作的函数和方法,巧用这些函数与方法,能极大的提高我们程序的性能。本文就来和大家分享一下Go标准库strings的常用函数和方法,希望对大家有所帮助
    2022-11-11
  • 详解Go语言各种常见类型的默认值和判空方法

    详解Go语言各种常见类型的默认值和判空方法

    本文主要介绍了详解Go语言各种常见类型的默认值和判空方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • golang socket断点续传大文件的实现方法

    golang socket断点续传大文件的实现方法

    今天小编就为大家分享一篇golang socket断点续传大文件的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Golang内存泄漏场景以及解决方案详析

    Golang内存泄漏场景以及解决方案详析

    golang中内存泄露的发现与排查一直是来是go开发者头疼的一件事,下面这篇文章主要给大家介绍了关于Golang内存泄漏场景以及解决的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • 详解Go中的高效切片拼接和Go1.22提供的新方法

    详解Go中的高效切片拼接和Go1.22提供的新方法

    在 Go 语言中,切片拼接是一项常见的操作,但如果处理不当,可能会导致性能问题或意外的副作用,本文将详细介绍几种高效的切片拼接方法,希望对大家有所帮助
    2024-01-01
  • 分布式架构在Go语言网站的应用

    分布式架构在Go语言网站的应用

    分布式架构是目前应对高流量、高并发的重要解决方案,分布式架构的核心思想是分而治之,将单台服务器的资源划分为多台服务器进行协同完成,分布式架构应用于Go语言网站中既能提升服务速度,又能降低了服务器宕机的风险
    2024-01-01
  • 使用golang进行http,get或postJson请求

    使用golang进行http,get或postJson请求

    这篇文章主要为大家详细介绍了如何使用golang进行http,get或postJson请求,文中的示例代码简洁易懂,具有一定的借鉴价值,感兴趣的小伙伴可以了解一下
    2023-12-12
  • goFrame的队列gqueue对比channel使用详解

    goFrame的队列gqueue对比channel使用详解

    这篇文章主要为大家介绍了goFrame的gqueue对比channel使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Go语言操作etcd的示例详解

    Go语言操作etcd的示例详解

    etcd是使用Go语言开发的一个开源的、高可用的分布式key—value存储系统,可以用于配置共享和服务的注册和发现,下面我们就来看看Go语言是如何操作etcd的吧
    2024-03-03
  • Go语言单控制器和多控制器使用详解

    Go语言单控制器和多控制器使用详解

    这篇文章主要为大家详细介绍了Go语言单控制器和多控制器的使用方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07

最新评论