注意:这个问题和这个问题相关,但是两年在围棋历史上是很长的时间。

在开发过程中组织Go项目的标准方法是什么?

我的项目是一个单独的包mypack,所以我想我把所有的.go文件放在一个mypack目录中。

然后,我想在开发过程中测试它,所以我至少需要一个声明主包的文件,这样我就可以运行trypack。go

我该怎么组织呢?每次我都需要安装mypack吗?


当前回答

我发现理解如何在Golang中组织代码非常有用,这一章http://www.golang-book.com/11由Caleb Doxsey撰写

其他回答

保持文件在同一目录下,并在所有文件中使用package main。

myproj/
   your-program/
      main.go
      lib.go

然后运行:

~/myproj/your-program$ go build && ./your-program

似乎没有组织Go项目的标准方法,但https://golang.org/doc/code.html为大多数项目指定了最佳实践。Jdi的答案很好,但如果你使用github或bitbucket,你也有额外的库,你应该创建以下结构:

~/projects/
bin/
pkg/
src/
  github.com/
    username/
        mypack/
            foo.go
            bar.go
            mypack_test.go
        mylib/
            utillib.go
            utillib_test.go

通过这样做,您可以为mylib拥有一个单独的存储库,可以用于其他项目,并且可以通过“go get”进行检索。你的mypack项目可以使用“github.com/username/mylib”导入你的库。欲了解更多信息:

http://www.alexvictorchan.com/2014/11/06/go-project-structure/

我研究过许多围棋项目,其中有相当多的变化。你可以看出谁来自C,谁来自Java,因为前者将项目根目录中的所有内容转储到主包中,而后者倾向于将所有内容放在src目录中。然而,这两种方法都不是最佳的。每种方法都会产生后果,因为它们会影响导入路径以及其他人如何重用它们。

为了得到最好的结果,我想出了以下方法。

myproj/
  main/
    mypack.go
  mypack.go

mypack的地方。Go是package mypack和main/mypack。Go显然是包的主体。

如果你需要额外的支持文件,你有两个选择。要么将它们全部保存在根目录中,要么将私有支持文件放在lib子目录中。如。

myproj/
  main/
    mypack.go
  myextras/
    someextra.go
  mypack.go
  mysupport.go

Or

myproj.org/
  lib/
    mysupport.go
    myextras/
      someextra.go
  main/
    mypack.go
  mypage.go

只有当文件不打算被另一个项目导入时,才将它们放在lib目录中。换句话说,如果它们是私有支持文件。这就是lib背后的思想——将公共接口与私有接口分开。

这样做将为您提供一个良好的导入路径myproj.org/mypack,以便在其他项目中重用代码。如果使用lib,则内部支持文件将有一个指示性的导入路径myproj.org/lib/mysupport。

在构建项目时,使用main/mypack,例如去构建main/mypack。如果你有多个可执行文件,你也可以在main下分离它们,而不必创建单独的项目。如主要/ myfoo / myfoo。去main/mybar/mybar。去。

我发现理解如何在Golang中组织代码非常有用,这一章http://www.golang-book.com/11由Caleb Doxsey撰写

jdi拥有关于使用GOPATH的正确信息。我想补充的是,如果你也想有一个二进制文件,你可能想要在目录中添加一个额外的级别。

~/projects/src/
    myproj/
        mypack/
            lib.go
            lib_test.go
            ...
        myapp/
            main.go

运行build myproj/mypack将构建mypack包及其依赖项 运行go build myproj/myapp将构建myapp二进制文件及其依赖项,其中可能包括mypack库。