zoukankan      html  css  js  c++  java
  • govendor

    cd  到工程目录。

    govendor init : 初始化

    govendor fetch : 拉取包

    go 1.6以后编译go代码会优先从vendor目录先寻找依赖包;

    controllersarticleController.go:6:2: cannot find package "github.com/gin-gonic/gin" in any of:
            E:gocodesrcgin_demovendorgithub.comgin-gonicgin (vendor tree)
            C:Gosrcgithub.comgin-gonicgin (from $GOROOT)
            E:gocodesrcgithub.comgin-gonicgin (from $GOPATH)

    先从vendor下面找,再去GOROOT下面找,最后去GOPATH去找。

    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
  • 相关阅读:
    智能实验室-杀马(Defendio) 4.12.0.800
    智能实验室-结构化存储浏览器(SSExplorer) 1.7.0.170
    智能实验室-全能优化(Guardio) 4.94.0.830
    智能实验室-全能优化(Guardio) 4.9.0.790
    IT餐馆—第二十二回 控件
    当DiscuzNT遇上了Loadrunner(中)
    在Discuz!NT中进行缓存分层(本地缓存+memcached)
    介绍三个Silverlight 在线编辑器控件
    玩玩负载均衡在window与linux下配置nginx
    IT餐馆—第十八回 祭奠
  • 原文地址:https://www.cnblogs.com/yaowen/p/8486889.html
Copyright © 2011-2022 走看看