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

标签 go

我正在用 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 文件夹中时,构建命令不起作用。我必须进入 my_project/src 才能成功运行构建。我想从 my_project 文件夹中进行。如何强制理解 my_project 的源代码在 src 代码中?
  • 然后由 go install 命令生成的可执行文件被命名为 src。如何更改该可执行文件的名称?

最佳答案

I want all the source code to go in a folder src, and all the test code in a folder named 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 的期望以及您应该如何组织代码的详细信息,请参阅 GOPATH environment variable在 Command Go 文档中。以这种方式构建系统一段时间后,您将开始看到可以偏离它的地方(比如为测试实用程序创建其他目录,但不是测试用例)。在尝试过标准的 Go 方式之前,不要开始偏离。

关于go - 在 go 中将 main 移出存储库根目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29782549/

相关文章:

json - 并发解析 JSON - panic of runtime error(解码相关)

amazon-web-services - 从 AWS S3 panic : runtime error: 下载日志文件

windows - 列出在任意PE(EXE)文件中链接的DLL的名称

algorithm - 对 HTTP post 对象进行分类的最便宜的方法

if-statement - 提供从 if 语句问题返回的函数

Golang 未定义

go - slice 是按值传递的吗?

go - 如何检查字符串是否仅包含 Go 中的字母字符?

bash - 用-ldflags传递给Go编译器的字符串中的Shell变量不会扩展

go - 如何在函数调用链中使用 context.Context 取消