美文网首页
go vendor的用法

go vendor的用法

作者: CodingCode | 来源:发表于2020-08-05 05:49 被阅读0次

使用go很长时间后才整明白vendor的用法为啥这么坑人。

1. 通常目录结构:

$GOPATH/src
  |----appmodule1
        |----*.go
  |----appmodule2
        |----*.go
  |----<main>
       |----main.go
       |----vendor
             |----github.com

注意

  1. 模块<main>指得是你的app的main模块名字,当然也可以使用appname作为目录名,但是这里面的文件例如main.go必须用main作用package name,因为这个模块是应该main模块的;(相比较其他的appmodule1,appmodule2,他们的模块名也应该是路径名)
  2. vender必须在模块目录下面,例如main/vendor,而不能在GOPATH/src目录下面。

2. go编译办法

这和当前工作路径相关:

  1. 如果当前路径在$GOPATH/src,或者其子目录下面,那么vendor有效。
    • PWD=$GOPATH/src/main: go build
    • PWD=$GOPATH/src: go build -o <myapp> main/main.go
  2. 如果当前路径不在$GOPATH/src,或者其子目录下面,那么vendor无效,因为使用的是module依赖,而不是vendor依赖包管理了。

GOPATH的历史

  1. go最早的时候只支持GOPATH
  2. go1.5引入通知设置GO15VENDOREXPERIMENT=1开始支持vendor,注意还是需要GOPATH
  3. go1.11引入module概念,同时引入GO111MODULE=auto|on|off,至此可以不需要GOPATH
  • GO111MODULE=on,使用go module,不使用GOPATH
  • GO111MODULE=off,使用GOPATH,不使用go module
  • GO111MODULE=auto,取决于当前工作路径
    • 如果在GOPATH/src内,等同于GO111MODULE=off,即使用GOPATH
    • 如果在GOPATH/src外,等同于GO111MODULE=on,即不是GOPATH

总结go module和vendor

go module和vendor是两个冲突的设计,二者只能选一,不可混用。

  1. vendor依赖的是GOPATH,那么必须设置GOPATH
  2. module不使用GOPATH,那么不能设置GOPATH

如果从vendor到module迁移的怎么办:
-mod=vendor

相关文章

  • go vendor的用法

    使用go很长时间后才整明白vendor的用法为啥这么坑人。 1. 通常目录结构: 注意 模块

    指得是你的...

  • Go vendor使用

    各种依赖包报错: 下载go vendor:go get -u -v github.com/kardianos/go...

  • 奇怪的Go Vendor

    有了ruby,现在无论写什么都想找跟ruby对应的工具,其中包管理器就是这样的. ruby中有bundle 简单,...

  • Go Mod对比Go Vendor

    之前写Go的时候都是直接Deb或者更暴力的Go get来安装依赖包,也是因为那时候为了赶项目直接走最直接的方法,现...

  • Go 包依赖管理工具 —— govendor

    govendor 是一个基于 vendor 机制实现的 Go 包依赖管理命令行工具。与原生 vendor 无侵入性...

  • Go 包依赖管理工具 —— govendor

    govendor 是一个基于 vendor 机制实现的 Go 包依赖管理命令行工具。与原生 vendor 无侵入性...

  • 关于go 1.14版本在空项目中使用go mod的bug处理

    go 1.14在空项目中 使用go mod vendor会报错 这个是go1.14的一个bug 要处理这个就需要...

  • go mod vendor小计

    调试库代码 go mod现在已经深入人心。想用fmt.Printf大法调库代码,会发现缓存的go mod代码是不能...

  • go mod 使用汇总

    go mod 是什么 是官方的包管理工具 之前有非官方的,如 go vendor等工具 发展历程 在go的1.11...

  • Go包管理最佳实践(2019/3)

    Golang的包管理经过了多种工具的演变,从go vendor,到godep),再到dep。这里使用的是从go v...

网友评论

      本文标题:go vendor的用法

      本文链接:https://www.haomeiwen.com/subject/auzgrktx.html