安装:

1、mac:brew Install godep,全局可用

2、go get -u -v github.com/tools/godep  参数-u表示更新,-v可以看到进度信息。成功安装后,在$GOPATH的bin目录下会有一个godep可执行的二进制文件,后面执行的命令都是用这个,建议这个目录加入到全局环境变量中

Godeps.json文件

Godeps.json文件描述了工程依赖项。Godeps.json文件位于工程目录的子目录Godeps下

包管理使用 godep

工程目录应当是$GOPATH的子目录。以下命令都是在工程的根目录运行

拉取依赖 restore 用于开发:godep restore

如果下载的项目中只有Godeps.json文件,而没有包含第三库则可以使用godep restore这个命令将所有的依赖库下载到$GOPATH\src中用于开发,godep restore执行时,godep会按照Godeps/Godeps.json内列表,依次执行go get -d -v来下载对应依赖包到GOPATH路径下;

godep restore将Godeps/Godeps.json文件中指定的包安装到$GOPATH目录。

godep restore,可以将vendor下的代码反向拷贝到$GOPATH下。

检出依赖 :godep save

扫描本项目的代码,将项目依赖的包及该包的版本号(即git commit)记录到Godeps/Godeps.json文件中;将依赖的代码从GOPATH/src中copy到vendor目录(忽略原始代码的.git目录)。

  • 自动扫描当前目录所属包中import的所有外部依赖库(非系统库)

  • 将所有的依赖库下载下来到当前工程中,产生文件 Godeps\Godeps.json

  • 在没有 Godeps\ 文件的情况下,生成依赖目录vendor\文件夹

godep save会将工程依赖项复制到工程目录的vendor/子目录下。在这个过程中,以下文件不会复制

  • 没有纳入版本管理的文件
  • *test.go
  • testdata目录
  • go包外的其他文件

godep 编译运行 build

项目用godep管理后,要编译和运行项目的时候再用go run和go build显然就不行

因为go命令是直接到GOPATH目录下去找第三方库,且在1.6以后支持vendor方式编译,而使用godep下载的依赖库放到Godeps/workspace目录下的,但是不影响继续使用依赖GOPATH目录,所以与三方工具本身不冲突

故使用

godep go build XXX

godep中的go命令,就是将原先的go命令加了一层壳,执行godep go的时候,会将当前项目的workspace目录加入GOPATH变量中

增加新的依赖包:

  1. Run go get foo/bar
  2. Edit your code to import foo/bar.
  3. Run godep save (or godep save ./…).

如果要更新依赖包:

  1. Run go get -u foo/bar
  2. Run godep update foo/bar. (You can use the … wildcard, for example godep update foo/…).

Godeps目录的作用

  godep save时godep把所有依赖包代码从GOPATH路径拷贝到Godeps目录下,并去除代码管理目录。这个用处主要是为了支撑godep go tool的一系列操作,尤其是git clone了代码库下来后,通常直接用godep go install xxx即可完成编译,一定程度上能够缓解golang比较严格的代码路径和包管理带来的烦恼。

而在使用IDE时,可以通过把vendor添加到GOPATH实现代码跳转和编译等功能,比较方便

 
 

vendor

依赖GOPATH来解决go import有个很严重的问题:如果项目依赖的包做了修改,或者干脆删掉了,会影响我的项目。

那么vendor属性的作用就是让go编译时,优先从项目源码树根目录下的vendor目录查找代码(可以理解为切了一次GOPATH),如果vendor中有,则不再去GOPATH中去查找。注意,必须将依赖包拷贝到$GOPATH/src目录中,否则go会无视vendor目录,仍然去$GOPATH/src中去找依赖包。

参考:
1、https://www.jianshu.com/p/db59b10c8c51
2、https://ieevee.com/tech/2017/07/10/go-import.html#vendor

godep使用的更多相关文章

  1. godep 包管理工具

    godep是解决包依赖的管理工具 安装 go get github.com/tools/godep 成功安装后,在GOPATH的bin目录下会有一个godep可执行的二进制文件,后面执行的命令都是用这 ...

  2. 【GoLang】golang 报管理工具 Godep 介绍

    使用方法: 提交:cd ${GOPATH}/src/github.com/junneyang/xcloudgodep save -v ./...rm -rf vendor/git checkout - ...

  3. Go 命令之 godep

    本文参考:http://www.cnblogs.com/me115/p/5528463.html#h20 http://studygolang.com/articles/4385 关于Godep 发现 ...

  4. Godep的基本使用

    [http://studygolang.com/articles/4385] 关于Godep 发现好多golang项目都使用到godep作为包管理的工具,像比较大型的项目,比如kubernetes这种 ...

  5. go语言 godep save 报错 is not using a known version control system

    使用 godep save 后提示需要包 如果使用 gopm 下载需要的包,就会没有版本控制文件夹,再次使用godep save后会报错 https://github.com/gpmgo/gopm/i ...

  6. go语言学习--go中godep的使用小结

    go中的godep 本文参考:http://www.cnblogs.com/me115/p/5528463.html#h20 http://studygolang.com/articles/4385 ...

  7. godep 包管理

    go get -u -v github.com/tools/godep  godep save

  8. godep的save和update

    godep save ./... 把依赖的包从GOPATH里找到,然后固化到当前目录Godeps目录里. 但是它不分版本:如果GOPATH里某个包升级了,godep save不会把它更新到Godeps ...

  9. Golang Gin 项目包依赖管理 godep 使用

    Golang Gin 项目包依赖管理 godep 使用 标签(空格分隔): Go 在按照github.com/tools/godep文档go get完包以后,调整项目结构为$GOPATH/src/$P ...

随机推荐

  1. LOOPS 概率dp

    题意:迷宫是一个R*C的布局,每个格子中给出停留在原地,往右走一个,往下走一格的概率,起点在(1,1),终点在(R,C),每走一格消耗两点能量,求出最后所需要的能量期望 简单概率dp 注意   原地不 ...

  2. Java反射1——扫描某个包下的所有类

    1.从包package中获取所有的Class /** * 从包package中获取所有的Class * * @param pack * @return */ public static Set< ...

  3. 如何在Ubuntu 18.04上安装和配置Apache 2 Web服务器(转)

    如何在Ubuntu 18.04上安装和配置Apache 2 Web服务器 什么是Apache Web Server? Apache或Apache HTTP服务器是一个免费的开源Web服务器,由Apac ...

  4. python 字典相关操作

    字典 字典的增删改查 字典的创建方式: # 创建字典类型 info = { 'name':'李白', 'age':'25', 'sex':'男' } msg = { 'user01':'Longzel ...

  5. jQuery方法实现

    children 原生JavaScript中,如果希望找到某个元素的子元素,只能通过Node类型上的children方法一步一步获取.如 let li = document.querySelector ...

  6. 配置lambda

    =========== 添加 apply plugin: 'me.tatarka.retrolambda' 添加 compileOptions {         sourceCompatibilit ...

  7. sagas

    http://mp.weixin.qq.com/s?src=3&timestamp=1503011877&ver=1&signature=cngvQj8-8qYsYcHR-5A ...

  8. ConcurrentHashMap之实现细节(转)

    ConcurrentHashMap是Java 5中支持高并发.高吞吐量的线程安全HashMap实现.在这之前我对ConcurrentHashMap只有一些肤浅的理解,仅知道它采用了多个锁,大概也足够了 ...

  9. epoll的LT和ET使用EPOLLONESHOT

    epoll有两种触发的方式即LT(水平触发)和ET(边缘触发)两种,在前者,只要存在着事件就会不断的触发,直到处理完成,而后者只触发一次相同事件或者说只在从非触发到触发两个状态转换的时候儿才触发. 这 ...

  10. 移植Python3到TQ2440(二)

    接着前一篇博文. 在上一篇博文中我们用NFS挂载根文件系统的方式启动了系统,接下来我们把移植了Python3的根文件系统固化到NandFlash中,但是由于linux-4.9目前不支持Yaffs2文件 ...