go中将main移出存储库根目录

时间:2015-04-21 20:31:39

标签: go

我正在创建一个项目。由于项目存储库(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文件夹中时,build命令无效。我必须进入my_project / src才能成功运行build。我想从my_project文件夹中执行此操作。如何强制了解my_project的源代码是否在src代码中?
  • 然后,go install命令生成的可执行文件名为src。如何更改该可执行文件的名称?

1 个答案:

答案 0 :(得分:8)

  

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

Go有一种组织源代码的方式。不要打这个。这是系统的工作方式。按照Go要求的方式组织您的代码。不要试图以你学习用其他语言工作的方式强迫去工作。每种语言都有自己的做事方式。他们都没有"正确。"像Java一样,Go对你应该做的事情有非常具体的想法。这样做。 (这不是关于Go是"对"或Go是"错误的争论。" Go是Go,它以Go方式执行。)

特别是,你不应该创建另一个" src"目录。已经有一个" src"目录位于" go"树。如果你创建另一个冗余的" src"目录,然后您的项目的包名称是" github.com/user/my_project/src"这可能不是你想要的。

要将可执行文件命名为您想要的名称,请将其放在名为您想要的目录中(可能是" my_project")。将测试文件与他们测试的文件放在一起。这是怎么回事。

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

\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方式。