go - GoLang - 项目结构 - 第三方库的供应商/文件夹
问题描述
方法一
对于任何应用项目结构,作者推荐以下应用项目结构:
Application
├── cmd/
├── internal/
│ └── platform/
└── vendor/
where文件夹在项目结构vendor/
中具有 3rd 方库,它们大多是“ble”,但被推送到 GitHub 存储库(在上述情况下)。将文件夹推送到 GitHub 存储库看起来没有必要go get
/vendor
方法二
我通常go get
将第 3 方放入公共本地工作区文件夹 ( ~/golib
),它位于项目结构之外,并由 GOPATH
如下所示的设置驱动。因此,与 3rd 方相关的代码没有推送到 GitHub:
export GOPATH=/home/user/golib
export PATH=$PATH:$GOPATH/bin
# First segment of GOPATH is used by "go get" command
# All segments of GOPATH are used for source code
export GOPATH=$GOPATH:/home/user/code
在方法 1 中,在应用程序项目结构中为第 3 方维护vendor/
文件夹并推送到 GitHub 存储库有什么好处?不像方法2
解决方案
Go 1.6 中添加了对供应商文件夹的支持,以帮助您获得您知道适用于您的代码的包的版本,以防进行了非向后兼容的更改并且您无法确定 repo 中的哪个版本是一个您使用过(或者更糟糕的情况是回购完全消失)。
使用最近的 Go 版本中添加的模块可以避免使用供应商文件夹方法,这允许您通过保证使用相同版本的包来获得可重复的构建。Go Modules 类似于您的方法 2,但在 Go 编译器和工具中有更好的支持。
总之:您的方法应该是使用带有模块的 Go 1.14。
推荐阅读
- excel - 使用复选框将行复制到更正选项卡
- web-scraping - 使用 python 或任何其他工具从同一 URL 抓取动态信息
- extjs - Extjs 网格特殊字符问题
- domain-driven-design - 如何跨有界上下文传递(发布/订阅)域事件
- javascript - 木偶改变输入值
- php - 在 Wordpress + q-translate + CMB2 + 可重复组中丢失换行符
- python - 图像处理:尝试更改像素颜色时出现 IndexError
- java - 如何将unicode字符打印成字符串?
- python - 如何避免复杂圆形方法的错误。?
- c++ - reinterpret_cast 清空子类