首页 > 其他分享 >golang官方包管理vendor模式无法引用非go文件

golang官方包管理vendor模式无法引用非go文件

时间:2023-08-28 20:44:46浏览次数:501  
标签:文件 vendor modvendor golang go com mod

主页

背景&问题

golang作为高级计算机语言之一,在云原生以及web网站建设中发挥了重要作用,但在实际应用中我们可能会碰到以下场景,在该场景下:

  • 部署机无法访问外网,无法直接从互联网下载依赖包
  • golang依赖的第三方包使用了cgo

在以上场景中,我们会自然而然想到使用go mod vendor方式事先在本地下载完整的依赖,然后打包到部署机上再进行部署。然而在实际使用中我们会发现,go mod vendor只对.go文件有效,并不会将.h,.c,.a等文件打包到项目vendor目录下。

当然我们可以手动copy这些非go文件项目vendor的制定目录下,但费时费力并且极易容易出错。

解决方案

解决以上问题的主要思路是:通过工具自动化解析vendor/modules.txt,并将第三方包中的指定格式文件copy到vendor对应目录下,工具使用方式如下:

# 1. 安装下载modvendor程序
go get -u github.com/goware/[email protected]

# 2. 将依赖包导入到自己的项目根目录下
GO111MODULE=on go mod vendor

# 3. 使用modvendor将vendor下第三方依赖的.c/.h/.a文件copy到vendor对应目录下
modvendor -copy="**/*.c **/*.h **/*.a" -v

注:modvendor实际上是通过文件后缀名进行文件扫描和复制的

总结

本文介绍了go mod vendor无法导入非go文件的问题,并使用辅助工具modvendor解决了该问题。
注:该工具为开源程序:https://github.com/goware/modvendor ,本文作者不对该工具带来的风险问题负责。

参考资料

标签:文件,vendor,modvendor,golang,go,com,mod
From: https://www.cnblogs.com/informatics/p/17663287.html

相关文章

  • 萌萌哒桌面宠物“手鼓猫 Bongo Cat Mver”
    BongoCatMver是一款可爱Q萌、实用的鼠标键盘替身演示工具。BongoCatMver适用于各种主播用户,用户只需要将这个小猫敲键盘的动画放置在电脑窗口上的任何位置,即可将用户所做出的各种键盘鼠标操作实时显示在卡通形象上。BongoCatMver还支持很多动作表情的自定义。BongoCatMver软件功能......
  • Go文件操作
    写文件packagemainimport( "fmt" "os")funcmain(){ f1,err:=os.Create("/Users/db/go_project/BeegoDemo/test.txt")//新建文件 //f2,err2:=os.OpenFile("/Users/db/go_project/BeegoDemo",os.O_CREATE,0666)//新建文件......
  • Golang数据库标准库
    驱动连接数据库是典型的CS架构,服务器端被动等待客户端建立TCP连接,并在此连接上进行特定的应用层协议。但一般用户并不需要了解这些细节,这些都被打包到驱动库中,只需要简单的调用打开就可以执行协议连接到指定的数据库。数据库的种类和产品很多,协议也很多,Go官方很难提供针对不同数据......
  • django(cookie与session、中间件、auth模块)
    一cookie与session1发展史及简介"""发展史1.网站都没有保存用户功能的需求,所有用户访问返回的结果都是一样的eg:新闻、博客、文章2.出现了一些需要保存用户信息的网站eg:淘宝、支付宝、京东解决每次访问网站都需要重复的输入......
  • Go语言GOPROXY设置
    1.首先开启gomodulegoenv-wGO111MODULE=on//WindowsexportGO111MODULE=on//macOS或Linux2.1-七牛云配置:goenv-wGOPROXY=https://goproxy.cn//WindowsexportGOPROXY=https://goproxy.cn//macOS或Linux2-阿里云配置:goenv-w......
  • go 语言中的占位符详解
    在Go语言的fmt包中,占位符用于格式化输出,允许在输出时插入变量的值。以下是一些常用的占位符及其用法:通用占位符:%v:按照值的默认格式输出。%+v:输出结构体时,会添加字段名。%#v:输出Go语法表示的值。%T:输出变量的类型。%%:输出百分号。布尔值占位符:%t:格式化布尔值......
  • Codeforces Round 892 (Div. 2)E. Maximum Monogonosity(动态规划,数学)
    题目链接:https://codeforces.com/contest/1859/problem/E 题意: 有长度为n的a和b俩个序列,定义f【l,r】=abs(a【l】-b【r】)+abs(b【l】-a【r】); 给正整数k,求 不相交的区间且  所有  区间的长度 的 和 为k的最大值 是多少? 分析: 这里借鉴一个佬......
  • go操作mongodb
    目录go操作mongodb依赖实例go操作mongodb依赖gogetgo.mongodb.org/mongo-driver/mongo实例packagedailyimport( "context" "fmt" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org......
  • google Map经纬度坐标取得方法
        谷歌地图(交通地图)上并没有显示某个地址的经纬度,实际上,我们已经想到了一个办法,可以找到在谷歌地图上任意地点的经度和纬度。 首先打开Google地图,在上面寻找一个地址,然后上下左右移动地图,让这个地址正好处于地图的正中心位置,当您想寻找坐标位置已经处于地图的中心位......
  • Maven plugin中的lifecycle、phase、goal、mojo概念及作用的理解
       首先,说些题外话,maven的plugin真的很容易写,很多时候,我们只是被plugin这个词吓倒了,总以为插件这玩意,是专家才能写的,我maven都没精通,怎么写得出自己的plugin呢,其实不然,起码在maven中,写一个自己的plugin还是非常简单的,其它软件的插件,要看情况,有些的确是要天才级人物才写得出,......