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

 更新时间:2020-12-09 21:04:53   作者:佚名   我要评论(0)

背景:调试服务最好的方式就是直接上机实践。对在公司的员工来说,在同一套服务上协同开发比在单独的环境上开发,应该会更有感觉。有问题可以一起发现并解决,也能够

背景:调试服务最好的方式就是直接上机实践。对在公司的员工来说,在同一套服务上协同开发比在单独的环境上开发,应该会更有感觉。有问题可以一起发现并解决,也能够一同开发需求。
但是,公司的测试机往往是没办法连外网的,而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的依赖内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
  • 解决vscode中golang插件依赖安装失败问题
  • golang不到30行代码实现依赖注入的方法
  • Django 导出项目依赖库到 requirements.txt过程解析

相关文章

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

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

    背景:调试服务最好的方式就是直接上机实践。对在公司的员工来说,在同一套服务上协同开发比在单独的环境上开发,应该会更有感觉。有问题可以一起发现并解决,也能够
    2020-12-09
  • go实现fping功能

    go实现fping功能

    1、什么是fping fping 是一个类似 ping 的程序,与 ping 不同的是你可以同时指定多个要 ping 的目标。 fping 发送完 ping 包后不等待回应,而是继续下一个目标 3、
    2020-12-09
  • goland2020.2.x永久激活码破解详细教程亲测可用(Windows Linux Mac)

    goland2020.2.x永久激活码破解详细教程亲测可用(Windows Linux Mac)

    上篇文章给大家分享了goland2019.1版本的激活码和激活教程,感兴趣的朋友点击此处了解详情! goland已经更新到2020.2.3,很多小伙伴都在用2019版,该升级了! 本文
    2020-12-09
  • 使用go实现删除sql里面的注释和字符串功能(demo)

    使用go实现删除sql里面的注释和字符串功能(demo)

    项目里面有一个需求,要对sql进行简单的语法分析 为了避免sql里面的字符串和注释对语法分析做干扰,我写了一个java函数,对sql进行修剪,删除里面字符串和注释,用空
    2020-12-09
  • GoLand编译带有构建标签的程序思路详解

    GoLand编译带有构建标签的程序思路详解

    简单构建一个项目,如下是mian.go文件 package main // 条件编译-构建标签-如何使用IDE编译和识别 func main() { RequestByRpc() } 模拟带有一个http tags的文
    2020-12-09
  • 聊聊golang的defer的使用

    聊聊golang的defer的使用

    序 本文主要研究一下golang的defer defer return先赋值(对于命名返回值),然后执行defer,最后函数返回 defer函数调用的执行顺序与它们分别所属的defer语
    2020-12-09
  • 部署Go语言项目的 N 种方法(小结)

    部署Go语言项目的 N 种方法(小结)

    本文以部署 Go Web 程序为例,介绍了在 CentOS7 服务器上部署 Go 语言程序的若干方法。 部署Go语言项目 本文以部署 Go Web 程序为例,介绍了在 CentOS7 服务器上部署
    2020-12-09
  • 基于gin的golang web开发之认证利器jwt

    基于gin的golang web开发之认证利器jwt

    JSON Web Token(JWT)是一种很流行的跨域认证解决方案,JWT基于JSON可以在进行验证的同时附带身份信息,对于前后端分离项目很有帮助。 eyJhbGciOiJIUzI1NiIsInR5c
    2020-12-09
  • go语言入门环境搭建及GoLand安装教程详解

    go语言入门环境搭建及GoLand安装教程详解

    Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC
    2020-12-09
  • mac下安装golang框架iris的方法

    mac下安装golang框架iris的方法

    安装前准备: 设置GOPROXY代理 参考:https://goproxy.cn/ 我使用的是下面的两条命令: $ go env -w GO111MODULE=on $ go env -w GOPROXY=https://goproxy.cn,dir
    2020-12-09

最新评论