iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > GO >Go语言中go mod vendor使用方法
  • 911
分享到

Go语言中go mod vendor使用方法

2024-04-02 19:04:59 911人浏览 安东尼
摘要

目录1.背景2.环境3.使用4.原理5.参考1.背景 我们基于 Go mod 机制来管理我们项目的依赖库版本,其中 go.mod 记录了依赖库版本信息。 一般第三方依赖库(包括公司

1.背景

我们基于 Go mod 机制来管理我们项目的依赖库版本,其中 go.mod 记录了依赖库版本信息。

一般第三方依赖库(包括公司内网gitlab上的依赖库),其源码都不被包含在我们的项目内部,而是在编译的时候go连接公网、内网下载到本地GOPATH,然后编译。

问题是,有些时候需在无公网、无内网(无法连接内网gitlab)的情况下编译go项目,如何做呢?

在此时,需使用go mod vendor将项目的依赖库下载到项目内部,作为项目的一部分来编译。

PS:

  • 虽然通常不会也不需要在无公网、无内网环境实时编译,因为go的可移植性很好,常以可执行文件方式交付部署,但并不能排除此种可能;
  • 防止依赖库因为某种原因被删除、移动,导致找不到依赖并编译失败;
  • 对新手来说,下载一些墙外的依赖可能略有困难;
  • 其他…

总之,我们的目的是使用 go mod vendor,将项目的依赖库下载到项目内部,即项目中包含依赖库源码,依赖库如同项目的一部分,也受到项目的版本管控(git、svn…)。

2.环境

go环境:

D:\workspace\demo>go env
set GO111MODULE=on
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\梁翠翠\AppData\Local\go-build
set GOENV=C:\Users\梁翠翠\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=C:\gopath\pkg\mod
set GONOPROXY=gitlab.ebupt.com
set GONOSUMDB=gitlab.ebupt.com
set GOOS=windows
set GOPATH=C:\gopath
set GOPRIVATE=gitlab.ebupt.com
set GOPROXY=https://goproxy.io
set GOROOT=C:\Program Files\Go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLDIR=C:\Program Files\Go\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=go1.17.2
set GCCGO=gccgo
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=D:\workspace\demo\go.mod
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0 -fdebug-prefix-map=C:\Users\梁翠翠\AppData\Local\Temp\go-build648873300=/tmp/go-build -gno-record-gcc-switches

goland版本:

3.使用

示例:

项目demo由两个文件构成:

1.main.go:项目依赖gopkg.in/yaml.v2 module(版本:v2.4.0);

2.go.mod:记录当前项目demo依赖yaml module;

最常用、最简单的办法是,直接执行go mod vendor:

执行go mod vendor,将此项目依赖的gopkg.in/yaml.v2@v2.4.0下载到项目demo的根目录vendor中,并按照特定格式、规范组织。

如果此时你ctrl+鼠标点击import后面的yaml.v2时,将自动跳转到vendor目录下的yaml.v2:

而不再是GOPATH中的yaml.v2:

goland在提示你,当前项目使用的是项目demo中vendor目录下得yaml.v2,而非GOPATH中的yaml.v2。

即使此刻,我们将GOPATH中的yaml.v2删除:

在项目中直接编译demo,不再需要下载yaml.v2依赖:

4.原理

官方文档请参见【重要!!!】:

1.Https://golang.org/ref/mod#go-mod-vendor

2.https://golang.org/ref/mod#vendoring

命令行帮助:

D:\workspace\demo>go help mod vendor
usage: go mod vendor [-e] [-v]

Vendor resets the main module's vendor directory to include all packages
needed to build and test all the main module's packages.
It does not include test code for vendored packages.

The -v flag causes vendor to print the names of vendored
modules and packages to standard error.

The -e flag causes vendor to attempt to proceed despite errors
encountered while loading packages.

See https://golang.org/ref/mod#go-mod-vendor for more about 'go mod vendor'.

关键部分:

1.The go mod vendor command constructs a directory named vendor in the main module’s root directory that contains copies of all packages needed to support builds and tests of packages in the main module.

2.When vendoring is enabled, the go command will load packages from the vendor directory instead of downloading modules from their sources into the module cache and using packages those downloaded copies.

3.If go.mod changed since vendor/modules.txt was generated, go mod vendor should be run again.

如果 go.mod 发生变化,应当重新执行 go mod vendor!

4.Note that go mod vendor removes the vendor directory if it exists before re-constructing it. Local changes should not be made to vendored packages. The go command does not check that packages in the vendor directory have not been modified, but one can verify the integrity of the vendor directory by running go mod vendor and checking that no changes were made.

  1. 执行go mod vendor将删除项目中已存在的vendor目录;
  2. 永远不要对vendor中的依赖库进行二次修改、更改!
  3. go命令不检查vendor中的依赖库是否被修改;

5.If the vendor directory is present in the main module’s root directory, it will be used automatically if the go version in the main module’s go.mod file is 1.14 or higher. To explicitly enable vendoring, invoke the go command with the flag -mod=vendor. To disable vendoring, use the flag -mod=readonly or -mod=mod.

在go version >= 1.14时,如果存在vendor目录,将自动启用vendor。

-mod=vendor
-mod=readonly
-mod=mod

6.When vendoring is enabled, build commands like go build and go test load packages from the vendor directory instead of accessing the network or the local module cache.

5.参考

  • https://golang.org/ref/mod#go-mod-vendor
  • https://golang.org/ref/mod#vendoring
  • https://yanbin.blog/go-use-go-mod-manage-dependencies/
  • https://cloud.tencent.com/developer/article/1626849
  • https://cloud.tencent.com/developer/article/1604866

到此这篇关于Go语言中go mod vendor使用方法的文章就介绍到这了,更多相关go mod vendor使用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: Go语言中go mod vendor使用方法

本文链接: http://www.lsjlt.com/news/121317.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go语言中go mod vendor使用方法
    目录1.背景2.环境3.使用4.原理5.参考1.背景 我们基于 go mod 机制来管理我们项目的依赖库版本,其中 go.mod 记录了依赖库版本信息。 一般第三方依赖库(包括公司...
    99+
    2024-04-02
  • 如何修复 go get: 被 -mod=vendor 禁用
    编程网今天将给大家带来《如何修复 go get: 被 -mod=vendor 禁用》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非...
    99+
    2024-04-05
  • 详解go mod 使用方法
    目录1、进入grammar文件夹2、初始化目录3、导入自定义的模块4、导入本地没有的模块常用命令1、初始化模块2 、获取远程的模块3、 查看当前依赖模块4、清除未使用到的依赖go m...
    99+
    2024-04-02
  • go mod的使用方法小结
    目录前言1.go modules的基本介绍1.1 提供的命令1.2 提供的环境变量1.2.1 说明2.go modules的基本使用2.1 初始化项目3.使用go mod发布自己的包...
    99+
    2024-04-02
  • Go语言中sync.Mutex的使用方法
    目录背景互斥锁注意背景 多个协程操作中经常出现脏读写的情况,这种情况下需要使用互斥锁,保证在对协程共享区域操作的原子性。 如下示例: 启动了 100个协程,每个协程累加 100 次,...
    99+
    2023-03-06
    Go sync.Mutex Go sync.Mutex使用方法
  • go语言中join方法怎么使用
    这篇“go语言中join方法怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“go语言中join方法怎么使用”文章吧。在...
    99+
    2023-07-05
  • Go语言中rune方法使用详解
    Go语言中rune方法如何使用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 1.byte类型 byt...
    99+
    2023-03-19
    Go语言rune方法 Go语言rune
  • GO语言包管理工具go mod以及包详解
    目录1.GO中包的定义与介绍2. 包管理工具 go mod2.1 自定义包 (可以包含多个go文件)2.1.1 建立项目并go mod init初始化2.1.2 自定义一个包(文件夹...
    99+
    2024-04-02
  • 如何在go语言中使用scan方法
    如何在go语言中使用scan方法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。操作环境:windows10系统、GO 1.11.2、thinkpad t480电...
    99+
    2023-06-14
  • Go语言中的基本map使用方法
    Go语言是一种开源的编程语言,具有高效性和简洁性,其中的数据结构之一就是map。在Go语言中,map是一种“键值对”的数据结构,可以用来存储一系列无序的键值对。本文将详细介绍Go语言中...
    99+
    2024-04-02
  • Go语言中的next()方法怎么使用
    本文小编为大家详细介绍“Go语言中的next()方法怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Go语言中的next()方法怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在许多编程语言中,序列...
    99+
    2023-07-06
  • go语言中的split方法怎么使用
    这篇文章主要介绍了go语言中的split方法怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇go语言中的split方法怎么使用文章都会有所收获,下面我们一起来看看吧。在go语言中,Split()方法用于分...
    99+
    2023-07-05
  • Go语言rune方法怎么使用
    这篇“Go语言rune方法怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Go语言rune方法怎么使用”文章吧。1.b...
    99+
    2023-07-05
  • go语言中ffmpeg使用的方法是什么
    Go语言中使用FFmpeg的方法有两种:使用CGO调用FFmpeg的C语言库,或者使用Go语言封装的FFmpeg库。 使用CGO调...
    99+
    2024-02-29
    go语言 ffmpeg
  • Go语言中函数的使用方法详解
    目录函数特点函数知识点函数的使用函数定义函数的参数函数的返回值函数的变量作用域函数的递归调用函数的可变参数函数的闭包函数的 defer 语句注意函数特点 函数可以有多个返回值。可以将...
    99+
    2023-05-18
    Go语言函数使用方法 Go语言函数使用 Go语言函数
  • go语言的init()方法如何使用
    这篇“go语言的init()方法如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“go语言的init()方法如何使用”文...
    99+
    2023-07-04
  • 探究Go语言中方法与函数的使用方法
    go语言提供了方法和函数两种机制来定义可重用代码块。方法用于在特定类型上操作数据,定义时需要显式指定接收者类型,使用点运算符调用。函数用于全局操作,定义与其他编程语言类似,使用括号调用。...
    99+
    2024-04-03
    方法 函数 go语言
  • Go语言中interface语法与使用详解
    目录初识interface基本语法其他注意事项interface底层实现ifaceeface侵入式与非侵入式的理解interface的应用场景类型转换实现多态功能补充:interfa...
    99+
    2024-04-02
  • go mod详细使用教程
    目录前言使用go path问题govendorgo mod介绍如何使用go modGO111MODULEgo mod命令使用go mod管理一个新项目1. 初始化项目2. 添加依赖g...
    99+
    2024-04-02
  • 如何在Go语言中有效使用create方法
    在Go语言中,使用create方法可以很方便地实现对象的创建和初始化操作。create方法通常用于创建对象实例,进行必要的初始化工作,并返回创建好的对象指针。在本文中,我将为您介绍如何...
    99+
    2024-03-12
    go语言 create方法 有效使用
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作