首页 > 解决方案 > 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

解决方案


Go 1.6 中添加了对供应商文件夹的支持,以帮助您获得您知道适用于您的代码的包的版本,以防进行了非向后兼容的更改并且您无法确定 repo 中的哪个版本是一个您使用过(或者更糟糕的情况是回购完全消失)。

使用最近的 Go 版本中添加的模块可以避免使用供应商文件夹方法,这允许您通过保证使用相同版本的包来获得可重复的构建。Go Modules 类似于您的方法 2,但在 Go 编译器和工具中有更好的支持。

总之:您的方法应该是使用带有模块的 Go 1.14。


推荐阅读