go vendor 介绍

go vendor 是go 1.5 官方引入管理包依赖的方式,1.6正式引入


其基本思路是,将引用的外部包的源代码放在当前工程的vendor目录下面,go 1.6以后编译go代码会优先从vendor目录先寻找依赖包;


1.解决的问题:
将源码拷贝到当前工程的vendor目录下,这样打包当前的工程代码到任意机器的$GOPATH/src下都可以通过编译,避免项目代码外部依赖过多,迁移后,
需要多次go get 外包依赖包;而且通过go get 重新拉去的外部依赖包的版本可能和工程开发时使用的不一致,导致编译错误问题。




2.未解决的问题:
无法精确的引用外部包进行版本控制,不能指定引用某个特定版本的外部包;只是在开发时,将其拷贝过来,但是一旦外部包升级,vendor下的代码不会跟着升级,
而且vendor下面并没有元文件记录引用包的版本信息,这个引用外部包升级产生很大的问题,无法评估升级带来的风险;


3.解决go vendor未解决的问题 使用govendor ,其有如下好处:
https://github.com/kardianos/govendor
1>.可以平滑的将现有非vendor项目转换为vendor项目
  govendor add  inport_out_packagename
2>会生成一个元数据文件,记录项目工程依赖的外部包,以及其版本信息
 vendor/vendor.json 
3>提供命令查看整个工程的依赖关系
goverdor --list 

goverdor --list -v


project:
https://github.com/kardianos/govendor


Sub-commands


    init     Create the "vendor" folder and the "vendor.json" file.                 #创建一个vendor目录并生成个空的verdor.json文件
    list     List and filter existing dependencies and packages.                    #查看已经存在的依赖包
    add      Add packages from $GOPATH.                                             #把$GOPATH中的包拷贝到vendor目录下
    update   Update packages from $GOPATH.                                          #把$GOPATH中的包更新到vendor目录下
    remove   Remove packages from the vendor folder.                                #从vendor目录下移除外部依赖包
    status   Lists any packages missing, out-of-date, or modified locally.          #查看缺失的或者本地修改的包
    fetch    Add new or update vendor folder packages from remote repository.       #从远程代码库拉取依赖包到vendor目录
    sync     Pull packages into vendor folder from remote repository with revisions #一句本地vendor/verdor.json文件指定的包机器版本信息从远程资源库拉取资源
                 from vendor.json file.
    migrate  Move packages from a legacy tool to the vendor folder with metadata.   
    get      Like "go get" but copies dependencies into a "vendor" folder.          #等于go get 但是同步外部依赖包到vendor目录,而不是$GOPATH/src
    license  List discovered licenses for the given status or import paths.             
    shell    Run a "shell" to make multiple sub-commands more efficient for large   
                 projects.


    go tool commands that are wrapped:
      `+<status>` package selection may be used with them
    fmt, build, install, clean, test, vet, generate, tool
    
    
Status


Packages can be specified by their "status".


    +local    (l) packages in your project
    +external (e) referenced packages in GOPATH but not in current project
    +vendor   (v) packages in the vendor folder
    +std      (s) packages in the standard library


    +excluded (x) external packages explicitely excluded from vendoring
    +unused   (u) packages in the vendor folder, but unused
    +missing  (m) referenced packages but not found


    +program  (p) package is a main package


    +outside  +external +missing
    +all      +all packages

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
go mod vendor是一个命令行工具,用于将主模块的vendor目录重置为包含构建和测试所有主模块包所需的所有包。它不包括供应商包的测试代码。如果主模块的根目录中存在vendor目录,并且主模块的go.mod文件中的go版本为1.14或更高版本,则会自动使用该vendor目录。要显式启用供应商功能,请使用标志-mod=vendor。要禁用供应商功能,请使用标志-mod=readonly或-mod=mod。go mod vendor还有其他好处,例如当从版本控制系统中删除依赖项或代理服务器丢失模块时,可以使用vendor解决问题。此外,它还可以帮助您跟踪和调试依赖项,并在需要时进行测试更改。运行go mod tidy和go mod vendor后,您的更改将被替换。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* [Go:go mod vendor 使用](https://blog.csdn.net/test1280/article/details/120855865)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Vendor使用:golang的vendor是个啥?](https://blog.csdn.net/qq_39458487/article/details/124803432)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值