• Go语言使用Godep进行包管理


    一、为什么要包管理

    默认Go的第三方包都是放在Gopath的src目录下,而且这些包都没有版本号的概念,这样的可能会出现一些问题。

    举个例子:当A同事将开发完程序之后,此时可能引用了一个第三方的包,过了不久之后,B同事接手了该项目,此时如果B同事通过go get 命令获取了包,而且包的版本进行了升级,恰巧这个包又不兼容以前的版本,这就会导致程序编译错误等问题。或者当这个维护的第三方包删除了,那么B同学则不能下载到该包。

    由上面的例子就能知道,为什么需要进行包的依赖管理了。

    go里面进行包依赖管理的工具有几个。godep就是其中之一。

    二、安装godep

    1.安装方法: go get github.com/tools/godep

    2.验证是否安装成功:在shell里面键入 godep ,应该会出现帮助信息。

    Usage:
    
            godep command [arguments]
    
    The commands are:
    
        save     list and copy dependencies into Godeps     		//save命令主要是用于保存当前的依赖
        go       run the go tool with saved dependencies   			//主要是用于执行Go程序,相当于在原来的go命令上套了一层,因为涉及到了包管理
        get      download and install packages with specified dependencies  //get命令主要是用于获取当前指定的依赖包
        path     print GOPATH for dependency code
        restore  check out listed dependency versions in GOPATH     	//把依赖的包都下载到Gopath当中
        update   update selected packages or the go version			//更新依赖的包
        diff     shows the diff between current and previously saved set of dependencies
        version  show version info
    

      

    三、演示如何使用godep

    如下项目使用了第三方的包,那么我们就可以使用godep进行包管理

    1. 在项目根目录,执行godep save 命令,如果执行成功,则会生成两个文件夹 Godeps 和 vendor

    godep save 会把当前包所依赖的所有第三方包扫描出来,然后将源代码放在vendor目录下。

    GoDeps保存的是第三方包的依赖信息

    Vendor保存所有依赖的第三方包

    可以查看一下Godep.json

    {
        "ImportPath": "godepDemo/protobuf",
        "GoVersion": "go1.10",
        "GodepVersion": "v80",
        "Deps": [
            {
                "ImportPath": "github.com/golang/protobuf/proto",
                "Comment": "v1.3.2-1-g4c88cc3f",
                "Rev": "4c88cc3f1a34ffade77b79abc53335d1e511f25b"
            }
        ]
    }
    

    Deps这一个字段里面保存着当前依赖包的路径、git提交的版本号信息。下次在拉下代码之后,执行Go build 就会执行Vendor里面的代码,这样就再也不用担心代码不一致的问题。

    备注:当引用的第三方包要升级了怎么办,那么就修改Godep.json里面的提交的版本号就行了。

    Godep是怎么实现版本管理的,可以参考下面这个图。

    总结如何使用godep

    1.保证程序能够正常编译

    2.执行godep save 命令,执行之后会将所有的依赖的第三方包扫描出来,生成Godeps和Vendor目录

    3.提交上面两个文件夹到自己的代码库,提交之后我们代码中的第三方依赖就固定下来了。

    4.如果需要更新依赖的版本,那么直接更新godep.json里面的第三方包的版本号,然后再执行一次godep save,最后提交到我们的代码库就行了。

    例如:可以查看一下我依赖的protobuf的commitId

     

    然后更新一下Godeps.json里面的版本号

  • 相关阅读:
    Codeforces Round #644 (Div. 3) A~G
    西安邮电大学第五届ACM-ICPC校赛(同步赛) B(拓扑排序)
    Codeforces Round #642 (Div. 3)A~D
    Codeforces Round #641 (Div. 2)A~D
    Codeforces Round #634 (Div. 3)A~E
    Educational Codeforces Round 85 (Rated for Div. 2)ABCD
    Codeforces Round #631 (Div. 2) ABD
    Codeforces Round #629 (Div. 3) E
    Educational Codeforces Round 84 (Rated for Div. 2) E
    yp训练赛3/21
  • 原文地址:https://www.cnblogs.com/dcz2015/p/11428458.html
Copyright © 2020-2023  润新知