【问题标题】:Move main out of the repository root in go在 go 中将 main 移出存储库根目录
【发布时间】:2015-04-21 20:31:38
【问题描述】:

我正在创建一个项目。由于项目存储库的根目录下已经有很多东西(doc,README.md ...),我希望所有源代码都放在一个文件夹 src 中,所有测试代码都放在一个名为的文件夹中测试:

\go
  \src
    \github.com
      \user
        \my_project
          \src
            main.go
            some_func.go
          \test
            test_main.go
            test_some_func.go
          \doc
          README.md

但我有两个问题:

  • 当我在 my_project 文件夹中时,构建命令不起作用。我必须进入 my_project/src 才能成功运行构建。我想从 my_project 文件夹中执行此操作。如何强制 go 理解 my_project 的源代码在 src 代码中?
  • 那么 go install 命令生成的可执行文件名为 src。如何更改该可执行文件的名称?

【问题讨论】:

    标签: go


    【解决方案1】:

    我希望所有源代码都放在一个文件夹 src 中,所有测试代码放在一个名为 test 的文件夹中:

    Go 有一种组织源代码的方式。不要为此而战。这就是系统的工作方式。按照 Go 想要的方式组织代码。不要试图强迫 Go 以你在其他语言中学习的方式工作。每种语言都有自己的做事方式。它们都不是“正确的”。与 Java 一样,Go 对您应该做什么有非常具体的想法。那样做。 (这不是关于 Go 是“正确”还是 Go 是“错误”的争论。Go 就是 Go,它以 Go 的方式做事。)

    特别是,您不应该创建另一个“src”目录。 “go”树的顶部已经有一个“src”目录。如果您创建另一个冗余的“src”目录,那么您的项目的包名称是“github.com/user/my_project/src”,这可能不是您想要的。

    要将可执行文件命名为您想要的名称,请将其放在您想要的目录中(可能是“my_project”)。将测试文件与他们测试的文件放在一起。这就是 go 的工作原理。

    所以你的树应该是这样的:

    \go
      \src
        \github.com
          \user
            \my_project
              main.go
              some_func.go
              main_test.go
              some_func_test.go
              \doc
                README.md
    

    尝试做除此之外的事情会一次又一次地失败,“我如何让构建系统做其他事情”的问题将不断返回“按照构建系统期望的方式放置您的代码。”

    有关 Go 的期望以及如何组织代码的详细信息,请参阅 Command Go 文档中的 GOPATH environment variable。一旦你以这种方式构建了你的系统一段时间,你将开始看到你可以偏离它的地方(比如为测试实用程序创建其他目录,但不是测试用例)。在你尝试过标准的 Go 方式之前,不要开始偏离。

    【讨论】:

    • 非常感谢。这是我希望没有的答案,但绝对感谢您花时间回答^^
    猜你喜欢
    • 1970-01-01
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 2015-12-24
    • 2012-07-30
    • 2013-10-06
    • 2011-04-14
    相关资源
    最近更新 更多