是否建议将程序源(而不是lib源)保存在单个文件中?

kik*_*kik 4 go

我正在迈出第一步,显然我正在从其他语言习惯而不是理解特定性和风格.

我决定重写一个我需要很长时间才能执行的ruby后台工作.它遍历我的数据库中的一个巨大的表并为每一行单独处理数据,因此它是并行化的良好候选者.

来自ruby on rails任务和使用orm,这就像我想到的那样,是一个非常简单的两个文件程序:一个包含结构类型及其表示和处理行和主要的方法文件来操作数据库查询并在行上循环(如果在我的主文件中它太重,可能是第三个文件来抽象​​数据库访问逻辑).我想要的文件分离意味着代码库的清晰度比最终二进制文件中的任何相关性更重要.

我已经阅读看到了关于这个主题的几个方面,包括这里的问题和答案,并且它总是倾向于将代码编写为库,安装它们然后将它们用于单个文件源(在包main中)程序.

我已经读过一个人可能会传递多个文件来构建/运行,但它会抱怨如果有几个包名(所以基本上,一切都应该在main)并且它似乎并不常见.

所以,我的问题是:

  • 我做对了,并且代码主要是作为库,只有一个文件程序导入它的方式去?
  • 如果是这样,你如何处理必须重复建立库?你是否在执行之前在库代码库中的每个更改上构建/安装(这不像是什么go run承诺那样方便),或者是否有一些常见的我不知道在处理这些库代码时快速而快速地执行库依赖程序?

Vol*_*ker 10

没有.

Go并且该go工具仅适用于包(仅go run适用于文件,但这是一个不同的故事):在组织Go代码而不是包时,不应该考虑文件.包可以分成几个文件,但是用于保持测试代码分离并限制文件大小或分组类型,方法,函数等.

你的问题:

我做对了,并且代码主要是作为库,只有一个文件程序导入它的方式去?

没有.有时这有优点,有时不是.有时分裂可能是一个lib +一个短主体,在其他情况下只有一个大主体可能更好.再说一遍:这完全是关于包而不是关于文件.如果这是一个真正的独立程序,单个12文件主程序包没有任何问题.但是,将一些东西提取到一个或几个其他包中可能会产生更易读的代码.这完全取决于.

如果是这样,你如何处理必须重复建立库?你是否在执行之前在库代码库中的每个更改上构建/安装(这比运行承诺更方便)或者是否有一些常见的我不知道如何快速和快速地执行库依赖程序图书馆代码?

go工具跟踪依赖项并重新编译所需的任何内容.假设您有一个包main main.go来导入包foo.如果执行go run main.go它将在需要时透明地重新编译包foo.所以对于快速黑客攻击:不需要两步 go install foo; go run main.一旦你将代码提取到三个包foo,bar和waz中,安装foo,bar和waz可能会快一些.