2 回答

TA贡献1847条经验 获得超11个赞
我在我的第一个项目中也这样做了。从那以后我了解到:
$GOPATH/bin/ pkg/ src/
布局由go get
类似的命令构成您可以将 .go 文件组织为单个平面项目目录或子文件夹(警告:同一文件夹中的所有 .go 文件必须具有相同的包名称)
将其他人的代码
/vendor
放在项目根目录中的目录中,如果它是您的应用程序需要工作的代码(谷歌这个,这是 go imo 最糟糕的部分)将您自己的项目放在您的 gopath 下,如果您希望它更易于访问,请对其进行符号链接
所以我想你的代码可能看起来像:
/Users/user2490003/MyGoPath/
▾ src/github.com/user2490003/myproject/
▾ model/
user.go
▾ myapp/
myapp.go
▾ vendor/github.com/jmoiron/sqlx/
sqlx.go
main.go
导入完整的包引用,如下所示:
// main.go
package main
import (
github.com/jmoiron/sqlx
github.com/user2490003/myproject/myapp
github.com/user2490003/myproject/model
)

TA贡献1995条经验 获得超2个赞
我建议从一个看起来合乎逻辑且在当前有效的布局开始,然后在您的应用程序增长和发展时根据需要进行重构/重组。
使用您的公司命名空间是合理的 - 我会考虑为您的应用程序在其下方(例如company.co/my_app
)和内部创建一个目录,库包的子目录(例如company.co/my_app/db
等)以及cmd
包含实际目录的目录您要生成的可执行文件(package main
程序):cmd/exe1、cmd/exe2 等。这将允许您在其中拥有多个可执行文件以及多个库“子包”,my_app
它们可以独立地包含在相应的导入路径中。
我包含的每个库(例如 sqlx 等)也有它自己的文件夹。
如果您可以使用来自 Github 的最新版本的依赖项,则不必将依赖项的代码包含到您的存储库中,而是将它们安装go get
到构建区域中。如果您想从本地副本构建 - 并且为了企业使用,它可能更适合稳定性和审计跟踪 - 您应该将它们放在vendor
子目录中,例如company.co/my_app/vendor/github.com/jmoiron/sqlx
. 这样,您可以控制何时升级到较新版本的依赖项,并确保上游更改不会在您不知情的情况下破坏您的构建或以其他方式影响您的程序,直到您有机会进行彻底的测试。
- 2 回答
- 0 关注
- 135 浏览
添加回答
举报