【发布时间】:2018-07-17 17:28:28
【问题描述】:
我是 Go 编程语言的新手。如果可能的话,我希望将 Go 代码集成到包含异构代码的现有代码中。我目前的代码组织是:
<reverse-TLD>/<component-path>/<code><extension>
地点:
-
是部分颠倒的域。例如, com.mydomain.mysubdomain。 -
是代码所在的 1 个或多个子目录。例如, image/jpeg。 -
</strong> 是扩展名之前的代码文件名部分。例如,jpeg2000。 -
是扩展名。例如, .sh、.py等。例如,与上面的其他元素一起使用的这将具有路径:com.mydomain.mysubdomain/image/jpeg/jpeg2000.go。
请注意,Go 文件以外的代码文件与 Go 文件位于同一目录中。
我的问题是:
- 我上面的现有结构不包括 src、pkg 或 bin 目录。是否有允许我指定这些目录的环境或 Go 环境变量?
目录及其下的所有文件都是只读的。我需要编译的输出基于另一个目录,以 $BUILD_DIR给出。该目录下可以有任何需要的目录。- 我认为作为惯例,我可以为将成为可执行命令的 Go 代码使用小写文件名,为将成为包对象的 Go 代码使用前导大写文件名。在 Go 社区中是否存在用于区分这种区别的最佳实践命名约定?
- 我使用反向 TLD 有什么问题吗?例如,
com.mydomain.mysubdomain与mysubdomain.mydomain.com。
如果 src、pkg 和 bin 目录是硬性要求,那么我想我必须编写一个脚本来查找go 文件并将它们复制到满足要求的临时目录,编译它们,然后将构建的工件移动到$BUILD_DIR。但是,我希望 Go 足够灵活,可以让我这样做。
如果可能的话,你能告诉我在上述约束条件下编译所需的命令或环境变量吗?并且,对上述 1-4 项的 cmets 表示赞赏。谢谢!
【问题讨论】:
-
很难将整个
GOPATH迁移到您当前的结构中。我建议有一个GOPATH并在那里编写代码,然后使用软链接链接回您当前的结构。 -
如果你想使用 go 工具,你必须遵循 Go 的约定。您可以根据需要编译和链接代码,但工作量很大,而且没有其他人的工作流程与您的工作流程兼容。
-
如果您是“Go 编程语言的新手”,只有一个建议:不要与该语言对抗。停止做你尝试做的事情(不知道它是什么)并按预期使用 Go。一旦你理解了 Go:自己调用编译器和链接器(看看 go 工具是如何通过使用 -x 运行它的)。
-
我真的认为您在错误的级别进行抽象/分组。我从事过许多多语言项目,从来没有理由将多种语言集成到同一个目录结构中,也无法想象我为什么想要这样做。也许您的用例超出了我的专业知识范围,但如果您认为自己有特殊情况,最好在您的问题中解释一下。
-
“问题是将 Go 集成到现有代码中”没有简单的方法将 Go 集成到其他语言中,您将很难从 Python/Ruby/C++/Haskel 调用 Go 代码/任何代码。所以问题显然不是关于“集成”Go 与其他语言,而是关于如何构建多语言项目。这里唯一的答案是不要尝试在 Go 上强制使用不合适的目录结构。
标签: go build compilation