原文地址:golang编译之vendor机制

Go 1.5引入了vendor 机制,但是需要手动设置环境变量 GO15VENDOREXPERIMENT= 1,Go编译器才能启用。从Go1.6起,,默认开启 vendor 目录查找,vendor 机制就是在包中引入 vendor 目录,将依赖的外部包复制到 vendor 目录下,编译器在查找外部依赖包时,优先在 vendor 目录下查找。整个查找第三方包的流程如下:

  • 如果当前包下有vendor目录,则从其下查找第三方的包,如果没有找到,则继续执行下一步操作。
  • 如果当前包目录下没有vendor目录,则沿当前包目录向上逐级目录查找vendor目录, ,直到找到 $GOPATH/src下的vendor目录,只要找到vendor目录就去其下查找第三方的包,如果没有则继续执行下一步操作。
  • 在GOPATH下面查找依赖包。
  • 在GOROOT目录下面查找依赖包。

优点:

vendor将原来放在$GOPATH/src的第三方包放到当前工程的vendor目录中进行管理。它为工程独立的管理自己所依赖第三方包提供了保证,多个工程独立地管理自己的第三方依赖包,它们之间不会相互影响。 vendor将原来包共享模式转换为每个工程独立维护的模式, vendor的另一个好处是保证了工程目录下代码的完整性,将工程代码复制到其他Go编译环境,不需要再去下载第三方包,直接就能编译,这种隔离和解耦的设计思路是一大进步。

缺点:

但vendor也有缺点,那就是对外部依赖的第三方包的版本管理。

我们通常使用 go get -u更新第三方包。默认的是将工程的默认分支的最新版本拉取到本地,但并不能指定第三方包的版本。而在实际包升级过程中,如果发现新版本有问题,则不能很快回退,这是个问题。好在Go官方为了解决该问题推出了包依赖管理工具dep。与此同时,社区也有很多包管理工具,比较常用的有godep、govendor、glide。

makefile编译:

分享一个Go编译的通用makefile代码,这样我们就可以在任意目录下,只需简单的执行 make 命令就能轻松编译。

 1 ## watch for trailing spaces!2 THIS_MAKEFILE=$(lastword $(MAKEFILE_LIST))3 REPOROOT = $(abspath  $(dir $(THIS_MAKEFILE)))4 5 export GOPATH := $(REPOROOT)6 PATH := $(GOPATH)/bin:$(PATH)7 8 ifdef GOROOT9   #$(error Define GOROOT prior to running make)
10   PATH := $(GOROOT)/bin:$(PATH)
11 endif
12
13 PATH := /usr/local/go/bin/:$(PATH)
14
15 # BUILDVER is set by OBS (rpm build system)
16 BUILDVER ?= MANUALMAKEFILE
17
18 #when runs on build host - actual golang compiler name is 'golang-go', not 'go'.
19 #GOCMD ?= golang-go
20 GOCMD = go
21
22 GOCLEAN := $(GOCMD) clean
23
24 .PHONY: all
25 all:
26     mkdir -p $(REPOROOT)/bin
27     cd $(REPOROOT)/src/cmd/project; $(GOCMD) install
28
29 .PHONY: clean
30 clean:
31     @rm -rf $(REPOROOT)/bin
32     @rm -rf $(REPOROOT)/pkg

  • 23行/src/后修改成自己源码的路径。
  • vendor目录可以放在makefile所在目录或src里的任意目录中。

golang编译之vendor机制相关推荐

  1. (golang)HTTP基本认证机制及使用gocolly登录爬取

    内网有个网页用了HTTP基本认证机制,想用gocolly爬取,不知道怎么登录,只好研究HTTP基本认证机制 参考这里:https://www.jb51.net/article/89070.htm 下面 ...

  2. golang编译错误 copying /tmp/go-build069786374/b001/exe/a.out: No such file or directory 解决方法

    问题: linux虚拟机 golang编译 报错 copying /tmp/go-build069786374/b001/exe/a.out: No such file or directory 原因 ...

  3. KEIL编译stdarg处理机制遇到incorrect use之类的问题

    文章转自:https://blog.csdn.net/chengdong1314/article/details/74625528 SYD8801是一款低功耗高性能蓝牙低功耗SOC,集成了高性能2.4 ...

  4. golang 编译提示 cannot assign interface {} 和golang断言使用

    golang 编译提示 cannot assign interface {} 和golang断言使用: 从sync.Map中读取值的时候出现如下编译错误,因为返回的是interface类型,需要做转换 ...

  5. centos内核编译与其签名机制

    centos内核编译与其签名机制 linux内核3.7引入的签名机制,极大地方便了对内核模块的安全认证,同时也为操作系统厂家提供了IP保护的技术手段.不过,凡事有利也有弊.对刚刚接触具有签名机制的内核 ...

  6. golang编译时报错:Get “https://proxy.golang.org/github.com/antihax/optional/@v/v1.0.0.mod“: dial tcp 172.2

    一.问题 golang编译grpc-gateway时,报错: 二.解决 一行代码设置搞定 go env -w GOPROXY=https://goproxy.cn

  7. golang不编译.html,Golang编译-ldflags -X 在vendor中不生效的问题

    Golang项目在编译链接的时候可以通过 -ldflags -X 来给代码中的变量赋值,然而这天我却遇到了一个诡异的问题-- 版本信息 很多应用在 release 时都会给自己打上版本信息,方便使用者 ...

  8. golang的goroutine调度机制

    一直对goroutine的调度机制很好奇,最近在看雨痕的golang源码分析,(基于go1.4) 感觉豁然开朗,受益匪浅: 去繁就简,再加上自己的一些理解,整理了一下 ~~ 调度器 主要基于三个基本对 ...

  9. golang 编译后文件过大问题处理

    2019独角兽企业重金招聘Python工程师标准>>> go1.9.2出来了,有一个用golang写的工具要编译,正好也测试一下.我是在windows10 64位下测的.编译和执行文 ...

最新文章

  1. 决策树算法原理(ID3,C4.5)
  2. 实现量子计算,我们还需要做些什么?
  3. 64位windows驱动使用asm
  4. Python numpy函数hstack() vstack() stack() dstack() vsplit() concatenate()的使用
  5. 求关系模式r的所有候选码_关系数据理论基础概念
  6. c++常见面试题30道
  7. es6 var、let、const命令
  8. [转载]PHP 计算时间差
  9. java 俄罗斯方块窗口_[代码全屏查看]-java 俄罗斯方块
  10. mysql查询全年星期_数据库查询显示一年中所有的周一到周五的数据
  11. 拳王公社:虚拟资源项目怎么做?如何操作赚钱?最新操作方法
  12. js中立即执行函数会预编译吗_js变量提升和函数提升
  13. HTML批量转换jpg,html转换为图片(html to jpg)
  14. Form窗体点击关闭按钮并未关闭进程的解决方法
  15. Mysql 报错:Unknown collation: ‘utf8mb4_0900_ai_ci‘
  16. priority_queue的优先级设置
  17. php 跨域解决方案
  18. 电瓶车续航测试软件,【图】2019年新能源车测试盘点:续航能耗篇_汽车之家
  19. 变声算法实现(基频追踪+SOLA)
  20. nbiot教学实箱_基于NBIoT的一种智能环卫装置的设计与实现

热门文章

  1. uni.share失效 无法唤醒微信 而且还卡住的情况
  2. 洛谷——P1035 [NOIP2002 普及组] 级数求和
  3. 网页页面禁止用户复制
  4. 1k字让你理解死锁是什么?
  5. opencv之对图像中的点做几何变换
  6. springboot 数据权限_13 个最火的 SpringBoot 实战开源项目推荐!总有一个适合你!...
  7. 为资产分类定义折旧范围_SAP折旧范围概念
  8. Windows 下的坐标系
  9. 基于SDN的环路通信
  10. ServiceLoader用法demo