golang官方包管理vendor模式无法引用非go文件
主页
- 微信公众号:密码应用技术实战
- 博客园首页:https://www.cnblogs.com/informatics/
背景&问题
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/modvendor@v0.5.0
# 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 ,本文作者不对该工具带来的风险问题负责。
参考资料
- modvendor: https://github.com/goware/modvendor
golang官方包管理vendor模式无法引用非go文件的更多相关文章
- golang的包管理---vendor/dep等
首先关于vendor 1 提出问题 我们知道,一个工程稍大一点,通常会依赖各种各样的包.而Go使用统一的GOPATH管理依赖包,且每个包仅保留一个版本.而不同的依赖包由各自的版本工具独立管理,所以当所 ...
- 拜拜了,GOPATH君!新版本Golang的包管理入门教程
Go 1.11和1.12实现了对包管理的初步支持,Go的新依赖管理系统使依赖版本信息明确且易于管理.Using Go Modules - The Go Blog 新的包管理模式有什么不同? 作为Go语 ...
- Golang学习--包管理工具glide
上一篇文章中我们已经成功的运行了go的代码,这是我们迈出的最基础的一步. 一个项目通常会依赖很多外部的库,当依赖的库比较多的时候,手工管理就会比较麻烦,这个时候就需要包管理工具出场了,帮你管理好所有依 ...
- nexus 3.17.0 做为golang 的包管理工具
nexus 3.17.0 新版本对于go 包管理的支持是基于go mod 的,同时我们也需要一个athens server 然后在nexus 中配置proxy 类型的repo 参考配置 来自官方的配置 ...
- [golang] Glide 包管理
一.概述 golang的包管理工具有很多,本篇幅主要介绍glide进行包管理. 二.安装及命令介绍 go get github.com/Masterminds/glide glide create|i ...
- [golang] Glide 包管理工具,在windows10 64位系统上的bug修复方案
bug重现 [ERROR] Unable to export dependencies to vendor directory: Error moving files: exit status 1. ...
- golang包管理工具
软件开发中,不可避免的会使用到第三方库,因此包管理工具可以极大的方便开发者管理第三方依赖,避免掉入"依赖地狱". 作为google强大背书的golang语言,golang官方包管理 ...
- golang包管理解决之道——go modules初探
golang的包管理是一直是为人诟病之处,从golang1.5引入的vendor机制,到准官方工具dep,目前为止还没一个简便的解决方案. 不过现在go modules随着golang1.11的发布而 ...
- Golang高阶:Golang1.5到Golang1.12包管理
Golang1.5到Golang1.12包管理 1. 前言 Golang 是一门到如今有十年的静态高级语言了,2009年的时候算是正式推出了,然后到最近的一两年,2017-2018年的时候,突然直线上 ...
- golang包管理工具及环境管理工具;如何下载外网的依赖包
简介: golang的包管理工具类似于java的maven.python的pip.js的npm,可以实现依赖包的统一管理:有很多:govendor.godep.glide,挑一个自己喜欢的用吧.mac ...
随机推荐
- GaussDB(for MySQL)剪枝功能,让查询性能提升70倍!
作者,祝青平,华为云数据库内核高级工程师.擅长数据库优化器内核研发,9年数据库内核研发经验,参与多个TP以及AP数据库的研发工作. 近日,华为云数据库社区下面有这样一条用户提问留言:请问,如何通过My ...
- 8.1 Windows驱动开发:内核文件读写系列函数
在应用层下的文件操作只需要调用微软应用层下的API函数及C库标准函数即可,而如果在内核中读写文件则应用层的API显然是无法被使用的,内核层需要使用内核专有API,某些应用层下的API只需要增加Zw开头 ...
- 28图图解Raft协议,so easy~~
大家好,我是三友~~ 在之前写的<万字+20张图探秘Nacos注册中心核心实现原理> 这篇文章中我留了一个彩蛋 当文章点赞量突破28个,就单独写一篇关于Raft协议的文章 既然现在文章点赞 ...
- Visual Studio 2022 企业版 离线包 下载
今天安装了Visual Studio 2022 企业版工具,觉得改进还是有一定的,下面提供下载及序列号: 链接:https://pan.baidu.com/s/1qvzg8WtsgaCxrD3M4Y0 ...
- Worktile团队协作平台介绍
目前很多的基于SaaS模式的云平台都能满足你的需求,同类产品有很多,国内的明道.Worktile.http://Tower.im等,国外的Asana.Trello.Basecamp等,Trello是好 ...
- 神奇的 SQL ,同时实现小计与合计,阁下该如何应对
开心一刻 今天,小区有个很漂亮的姑娘出嫁 我对儿子说:你要好好学习,认真写作业,以后才能娶到这么漂亮的老婆 儿子好像听明白了,思考了一会,默默的收起了作业本 然后如释重负的跟我说到:爸,我以后还是不娶 ...
- 零基础入门Vue之皇帝的新衣——样式绑定
回顾 大致掌握了上一节的 插值语法 我已经可以把想要的数据显示到页面上,并且仅需要修改变量,页面就会跟着实时改变 但如果对于已经熟悉前端的人来说,单单有数据还是不太行,还需要css对数据进行样式的修饰 ...
- NEMU PA 3-1 实验报告
一.实验目的 在前面的PA1中,我们实现了CPU和FPU,在PA2中我们实现了对指令的解码和对ELF的装载,以及进一步完善了CLI调试器.那么在整个PA3中,我们将要着力于内存的相关处理,如Cache ...
- 【Android】使用 Broadcast 实现进程间通讯
1 Broastcast 简介 Broadcast(广播)是 Android 中一种广泛运用的在应用程序之间传输信息的机制.使用 Broadcast 能够很方便得实现进程间通讯,一端通过 send ...
- Swoole从入门到入土(1)——入坑
入坑一个话题,总得有入坑的理由.有好多话题可供选择,但是思来想去,对于PHPer进阶与其急着去掌握一门新的语言,匆忙地踏足一个新的知识体系,还不如先把php圈子的技能点攒齐了. 话说Swoole诞生之 ...