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 ...
随机推荐
- 使用telnet来调试游戏
telnet是什么 Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式.它为用户提供了在本地计算机上完成远程主机工作的能力 但是,telnet因为采用明文 ...
- SpringBoot实现动态数据源配置
场景描述: 前一阵子接手的新项目中需要使用2个数据源. 一个叫行云数据库,一个叫OceanBase数据库. 就是说,我有时候查询要查行云的数据,有时候查询要查 OceanBase 的数据,咋办? 废话 ...
- 码云gitee创建仓库并用git上传文件
相关文章链接: 码云(gitee)配置SSH密钥 码云gitee创建仓库并用git上传文件 git 上传错误This oplation equires one of the flowi vrsions ...
- Python 原生Socket实现端口扫描
端口扫描,就是逐个对一段端口或指定的端口进行扫描.通过扫描结果可以知道一台计算机上都提供了哪些服务,Python中使用Socket即可实现对特定端口的探测,以及对C段的扫描. 扫描目标主机Banner ...
- 纪念JDBC
技术总是在不断更新变化的,尤其是在IT编程领域. 有时候我们理所当然的用着现成的框架,以至于用的太过于顺手,更要时不时的骂一句: 什么垃圾框架?我家狗都不会用! 如果那些被拍死在沙滩的"前浪 ...
- SpringCloud-06-Consul注册中心
Consul Server Consul 是由 HashiCorp 基于 Go 语言开发的,支持多数据中心,分布式高可用的服务发布和注册服务软件. 用于实现分布式系统的服务发现与配置. 使用起来也较 ...
- 自己封装的 Python 常用工具库(prestool)
一.安装 需Python 版本建议 3.7 以上 pip install --upgrade prestool 二.常用工具 from prestool.Tool import Tool tool = ...
- 从浏览器原理出发聊聊 Chrome 插件
浏览器架构演进 单进程浏览器时代 单进程浏览器是指浏览器的所有功能模块都是运行在同一个进程里,这些模块包含了网络.插件.JavaScript 运行环境.渲染引擎和页面等.在 2007 年之前,市面上浏 ...
- .NET周刊【1月第3期 2024-01-24】
国内文章 .NET开源的简单.快速.强大的前后端分离后台权限管理系统 https://www.cnblogs.com/Can-daydayup/p/17980851 本文介绍了中台Admin,一款基于 ...
- HBase-compact介绍(minor和major区别)
一.minor和major的区别: Minor Compaction:指选取一些小的.相邻的HFile将他们合并成一个更大的HFile,但不会清理过期(TTL)和删除(打上Delete标记)的数据. ...