设为首页 收藏本站
查看: 1136|回复: 0

[经验分享] Golang Vendor 包机制 及 注意事项

[复制链接]

尚未签到

发表于 2018-9-20 10:20:16 | 显示全部楼层 |阅读模式
  现在的 Go 版本是 1.8,早在 1.5 时期,就有了 Vendor 包机制,详情可查看博文:“理解 Go 1.5 vendor”。

遇到的问题
  个人在使用 Glide 管理 Vendor 包时(附:Golang Vendor 包管理工具 glide 使用教程),老编译不成功! 后来猛地发现,原来是我对 Vendor 包机制理解不够深入导致的。
  Glide 官方教程中提供了一个 Demo 项目结构,如下所示:
  

$GOPATH/src/myProject (Your project)  
|
  
|-- glide.yaml
  
|
  
|-- glide.lock
  
|
  
|-- main.go (Your main go code can live here)
  
|
  
|-- mySubpackage (You can create your own subpackages, too)
  
|    |
  
|    |-- foo.go
  
|
  
|-- vendor
  
|-- github.com
  
|
  
|-- Masterminds
  
|
  
|-- ... etc.
  

  我改了一下,去掉了目录结构中的 myProject 文件夹,如下所示:
  

$GOPATH/src  
|
  
|-- glide.yaml
  
|
  
|-- glide.lock
  
|
  
|-- main.go (Your main go code can live here)
  
|
  
|-- mySubpackage (You can create your own subpackages, too)
  
|    |
  
|    |-- foo.go
  
|
  
|-- vendor
  
|-- github.com
  
|
  
|-- Masterminds
  
|
  
|-- ... etc.
  

  然后 go build 一直提示找不到相关的包(其实 glide 已经把它下载到 vendor 目录中了) 。
  后来回过头看 “理解 Go 1.5 vendor”,里面有一段有关 Vendor 的英文介绍:

  If there is a source directory d/vendor, then, when compiling a source file within the subtree rooted at d, import "p" is interpreted as import "d/vendor/p" if that exists.
  When there are multiple possible resolutions,the most specific (longest) path wins.
  The short form must always be used: no import path can  contain “/vendor/” explicitly.
  Import comments are ignored in vendored packages.

  它的大体意思就是,当有包路径 "d/vendor/p" 时,可以使用 import "p" 的简短形式来代替!
  其实,它还隐藏着另外一个非常重要的细节,即:

  vendor 目录不能放到 工作空间源码包目录的根目录($GOPATH/src)之下,必须放到 某个(项目)文件夹之下,如下面的  myProject 文件夹:
  

$GOPATH/src/myProject (Your project)  
  |
  
  |-- glide.yaml
  
  |
  
  |-- glide.lock
  
  |
  
  |-- main.go (Your main go code can live here)
  
  |
  
  |-- vendor
  
       |-- github.com
  
            |
  
            |-- Masterminds
  
                  |
  
                  |-- ... etc.
  

  

  好吧,接下来一切都很顺利!
  相关文章:
  【Go入门教程1】Go 安装,GOROOT,GOPATH,Go工作空间



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-598727-1-1.html 上篇帖子: golang AES/ECB/PKCS5 加密解密 url-safe-base64 下篇帖子: Golang Programming Tips
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表