golang编译之vendor机制

更新时间:2023-05-09 20:04:10 阅读: 评论:0

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 GOROOT
9  #$(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 t 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⾥的任意⽬录中。

本文发布于:2023-05-09 20:04:10,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/102372.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:依赖   编译   需要   问题   查找
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图