GoLang - 项目结构 - 第三方库的供应商文件夹 [已关闭]

问题描述 投票:-1回答:1

办法1

对于任何应用项目结构,一个 作者 推荐以下申请项目结构。

    Application

    ├── cmd/
    ├── internal/
    │   └── platform/
    └── vendor/

其中 vendor/ 文件夹中有第三方库 在项目结构中,其中大部分是 go get'ble,但 逼迫 到GitHub repo(如上例)。推送 /vendor 文件夹到GitHub repo看起来没有必要

办法2

我一般 go get 第三方进入普通本地工作区文件夹(~/golib),即 局外驱使,并由 GOPATH 设置如下图所示。所以,与第三方相关的代码是 顺理成章 到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中,维护GitHub的好处是什么?vendor/ 在应用项目结构中为第三方建立文件夹,并推送到GitHub repo?

go
1个回答
2
投票

在Go 1.6中增加了对供应商文件夹的支持,以帮助你获得你知道的与你的代码一起工作的包的版本,以防非向后兼容的变化,你无法找出repo中的哪个版本是你使用的版本(或者更糟糕的情况是repo完全消失)。

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

综上所述:你的方法应该是使用Go 1.14的模块。


0
投票

我认为

方法1我的合理性,如果你不想让你使用的每个包都包括某些适用于某个go项目的包来填满你的存储盘,只需要在全球范围内安装通用的包。

方法2和应用方法1相反,你把所有的东西都存储在本地磁盘里,但这种方式可能有好处,如果你想建立docker镜像,而不是重新下载每一个镜像的建立,你可以把现有的库在你的本地计算机上。

© www.soinside.com 2019 - 2024. All rights reserved.