【问题标题】:How to build Go without the literal bin, pkg, and src directories?如何在没有文本 bin、pkg 和 src 目录的情况下构建 Go?
【发布时间】: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 文件位于同一目录中。

我的问题是:

  1. 我上面的现有结构不包括 srcpkgbin 目录。是否有允许我指定这些目录的环境或 Go 环境变量?
  2. 目录及其下的所有文件都是只读的。我需要编译的输出基于另一个目录,以$BUILD_DIR 给出。该目录下可以有任何需要的目录。
  3. 我认为作为惯例,我可以为将成为可执行命令的 Go 代码使用小写文件名,为将成为包对象的 Go 代码使用前导大写文件名。在 Go 社区中是否存在用于区分这种区别的最佳实践命名约定?
  4. 我使用反向 TLD 有什么问题吗?例如,com.mydomain.mysubdomainmysubdomain.mydomain.com

如果 srcpkgbin 目录是硬性要求,那么我想我必须编写一个脚本来查找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


【解决方案1】:

这违反了 Go 的约定,不是推荐的做法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 2021-06-22
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    相关资源
    最近更新 更多