tools/godep -v 显示日志输出 -u 更新到最新版本 下载完成后查看C:\GoWorks\DepSource\bin\godep.exe是否存在godep.exe,有则安装成功 根据Godeps \Godeps.json配置还原依赖包 如果项目中有Godeps\Godeps.json,则可以使用godep get安装所需依赖包 3.2 生成go项目的依赖配置文件 新建一个go项目oneGo () } ``` 安装测试的包:go get -v github.com/yimogit/gotest 构建依赖配置:godep save success,若成功则看到oneGo文件夹下生成了Godeps
godep 将项目中使用到的第三方库复制到项目的 Godeps 目录下,因此 go build、go install 等工具显然因为无法找到包而不能工作了,所以 godep 提供了一系列工具来代替原生的 godep go get github.com/tools/godep 5.2. godep 的包管理 5.2.1. godep save godep save 命令将项目中使用到的第三方库复制到项目的 Godeps 在 Godeps/Godeps.json 文件中维护了各个依赖包的版本信息。 同时,执行命令后,包源码会被拷贝到 Godeps/_workspace/src 目录下用于后续进行的 godep go build 等命令的执行。 5.2.2. godep restore godep restore 命令执行后会按照 Godeps/Godeps.json 列表,依次执行 go get -d -v 来下载对应依赖包到GOPATH路径下
go get github.com/tools/godep # 了解godep命令 > 在终端输入 `godep help` 查看支持的所有命令 godep save 将依赖项输出并复制到Godeps.json godep diff 显示当前和以前保存的依赖项集之间的差异 godep version 查看版本信息 # 使用godep操作 在项目目录下执行`godep save`命令,会在当前项目中创建`Godeps `和`vender`两个文件夹, * Godeps文件夹: 下有一个Godeps.json的文件,里面记录了项目所依赖的包信息。 使用godep后的开发流程: 保证程序能够正常编译 执行godep save保存当前项目的所有第三方依赖的版本信息和代码 提交Godeps目录和vender目录到代码库。 如果要更新依赖的版本,可以直接修改Godeps.json文件中的对应项 (2) Module 模式 在Go1.11版本之后官方推出版本管理工具(go module),并从Go1.13版本开始它是Go语言默认的依赖管理工具
github.com/my/project go: creating new go.mod: module github.com/my/project go: copying requirements from Godeps /Godeps.json $ cat go.mod module github.com/my/project go 1.12 require rsc.io/binaryregexp v0.2.1-0.20190524193500 -545cabda89ca $ go mod init将创建一个新的go.mod文件,并自动从Godeps.json、Gopkg.lock或其他支持的格式导入依赖项。
.] $ cd project $ cat Godeps/Godeps.json { "ImportPath": "github.com/my/project", "GoVersion" github.com/my/project go: creating new go.mod: module github.com/my/project go: copying requirements from Godeps /Godeps.json $ cat go.mod module github.com/my/project go 1.12 require rsc.io/binaryregexp v0.2.1-0.20190524193500 -545cabda89ca $ go mod init 创建一个新的 go.mod 文件,并自动从 Godeps.json、Gopkg.lock 或一些其他受支持的格式导入依赖项。
.] $ cd project $ cat Godeps/Godeps.json { "ImportPath": "github.com/my/project", "GoVersion" github.com/my/project go: creating new go.mod: module github.com/my/project go: copying requirements from Godeps /Godeps.json $ cat go.mod module github.com/my/project go 1.12 require rsc.io/binaryregexp v0.2.1-0.20190524193500 -545cabda89ca $ go mod init 创建一个新的 go.mod 文件,并自动从 Godeps.json、Gopkg.lock 或许多其他受支持的格式导入依赖项。
godep通过把当前的GOPATH中的依赖包备份到Godeps/_workspace/保证依赖版本的快照。 这种管理很简陋也没有兼容性等信息,完全依赖开发者自己。 go官方引入了vendor来统一各种Godeps/_workspace/。所有放在包vendor目录下的依赖都会被优先使用。但本质上并没有比GOPATH好太多,版本号等信息同样没有。
为了能让第三方依赖包“稳定下来”,实现项目的reproduceble build,godep将项目当前依赖包的版本信息记录在Godeps/Godeps.json中,并将依赖包的相关版本存放在Godeps 在编译时(godep go build)godep通过临时修改GOPATH环境变量的方法让go编译器使用缓存在Godeps/_workspace下的项目依赖的特定版本的第三方包,这样保证了项目不再受制于依赖的第三方包的 同时,通过对GOPATH的“偷梁换柱”的方式实现使用Godeps/_workspace中的第三方库的快照进行编译也无法兼容Go原生编译器,必须使用godep go xxx来进行。 vendor标准化了项目依赖的第三方库的存放位置(不再需要Godeps/_workspace了),同时也无需对GOPATH环境变量进行“偷梁换柱”了,go compiler原生优先感知和使用vendor
POD_NAME可以通过grctl get 应用URL获取 root@ali-sh-rain01:~# grctl exec 6f92b39f54b7a86d1f1f01d15e7eb213-a0000 ls Godeps
SECURITY_CONTACTS test vendor build CHANGELOG.md code-of-conduct.md Godeps
依赖管理,开源社区多用Godeps,kubernetes用的也是这个。Godeps通过源码仓库路径以及源码tag来确定库的坐标,只管理依赖,有点像ivy,不关心构建过程。
/ [root@k8s-masteringress-nginx-0.9.0-beta.2]# ls CONTRIBUTING.md controllers core docs examples Godeps
migrating-to-go-modules https://blog.golang.org/migrating-to-go-modules 将项目迁移到go mod,主要讲的是对接老的版本管理系统,如godeps
issues-exit-code: 1 # 包含测试文件 tests: true # 忽略以下默认目录 # vendor$, third_party$, testdata$, examples$, Godeps
CHANGELOG.md ├── code-of-conduct.md ├── CONTRIBUTING.md ├── discovery ├── dynamic ├── examples ├── Godeps
首先我们看下源码结构,主要的目录可以分为三类: 文档类:api、docs、logo 工具类(build、cluster、Godeps、hack、staging、translations)工具类主要用到的
在Go 1.4版本中,我们使用了Godeps及其GOPATH来执行vendor;在1.5版本中,我们使用了GO15VENDOREXPERIMENT环境变量;到了1.6版本,终于不需要工具了——项目根目录下的
比如Golang的Godeps.json。 但实际上,一个一直以来很容易被忽视的事实是,对一个应用来说,操作系统本身才是它运行所需要的最完整的“依赖库”。
依赖关系将由godeps插件文件夹中已有的自动处理。
在Go 1.4版本中,我们使用了Godeps及其GOPATH来执行vendor;在1.5版本中,我们使用了GO15VENDOREXPERIMENT环境变量;到了1.6版本,终于不需要工具了——项目根目录下的