go - golang 是否没有文件结构?

标签 go

我一直在研究 golang 以构建网络应用程序,我喜欢这种语言和一切,但我无法理解 golang 中的结构概念。这似乎迫使我没有文件结构、没有文件夹、没有划分、没有关注点分离。有没有办法以我看不到的方式组织 .go 文件?到目前为止,文件结构一直是一个令人头疼的问题,这是我使用该语言唯一的糟糕经历。谢谢!

最佳答案

你说对了一部分。 Go 不强制执行任何关于文件和包结构的内容,除了它禁止循环依赖。恕我直言,这是一件好事,因为你可以自由选择最适合你的东西。

但是,这会给您带来决定什么是最好的负担。我尝试了几种方法,并且根据我正在做的事情(例如库、命令行工具、服务),我相信不同的方法是最好的。

如果您只创建命令行工具,请让根包(您存储库的根)成为main。如果它是小工具,这就是您所需要的。您的命令行工具可能会增长,因此您可能希望将一些东西分开,但不一定要在同一个存储库中。

如果您正在创建库,请执行相同的操作,除了包名称将是您的库的名称,而不是 main

如果您需要组合(作为库和命令行工具都有用的东西),我会把库代码(库的所有公共(public)内容)放在 VCS 根目录中,包括潜在的子包和 cmd/toolname 用于您的二进制文件。

当涉及到网络服务时,我发现遵循 these 是最实用的准则。最好阅读整篇博文,但简而言之 - 在 VCS 根目录中定义域,创建 cmd/app(或多个)作为命令行入口点,并为每个依赖项创建一个包(例如 memcache,数据库、http 等)。您的子包从不明确地相互依赖,它们只共享来自根目录的域定义。这需要一些时间来适应,我仍在根据我的用例调整它,但到目前为止它看起来很有希望。

关于go - golang 是否没有文件结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45524553/

相关文章:

mongodb - 在 Go 中模拟 MongoDB 响应

go - Go 编程语言中的 "method requires pointer receiver"

memory - 在 Go 中分析内存时看似不一致的结果

go - 发送到 channel 时避免竞争条件?

string - 如何从 golang 中的字符串制作预告片?

go - 有没有我们会求助于进程而不是 goroutine 的情况?

go - go中的斐波那契闭合

git - 让 git/go get 使用代理域

我可以使用动态链接嵌入到我的 C/C++ 项目吗?

templates - Golang 模板(并将函数传递给模板)