Go项目的文件系统结构

资料夹结构

Go项目由以下人员组成套餐。我们称之为命令具有main标识符。

一个项目可以有

  • 1包裹
  • n套餐
  • 1命令
  • 1命令和1包裹
  • n命令和1包裹
  • 1命令和n套餐
  • n命令和n套餐

根据项目的性质,您需要以某种方式组织文件夹结构。

一些现实世界的例子

让我们在下面看一些真实的例子。我把他们从建立Go项目的五个建议戴夫·切尼(Dave Cheney)撰写。

具有以下项目的示例1包裹:

https://github.com/kr/fs

具有以下项目的示例n套餐

https://github.com/pkg/term

具有以下项目的示例1命令

https://github.com/tools/godep

具有以下项目的示例1命令和1包裹

https://github.com/monochromegane/the_platinum_searcher

具有以下项目的示例n命令和n套餐

https://github.com/golang/tools

项目内文件结构的约定

从这些示例中,我们可以得出以下约定:

如果您有一个命令,它可以存在于main.go文件放在项目的根目录中。

使用多个命令,创建一个cmd/文件夹,然后在此文件夹下创建一个带有命令名称的文件夹。在每个文件夹中,理想情况下.go具有相同名称的文件将包含main()功能,尽管不是强制性的。

程序包放在自己的文件夹中,除非您只有一个程序包。

已安装软件包的文件系统位置

可以使用以下命令安装任何Go项目go getgo get将在以下位置安装软件包$GOPATH/src。例如输入

go get github.com/kr/fs

将下载并安装位于以下位置的1包存储库https://github.com/kr/fs,并将其置于$GOPATH/src/github.com/kr/fs。我们可以在程序中使用import github.com/kr/fs

如果我们键入怎么办

go get github.com/tools/godep

反而?请记住,这是我们之前列出的单命令存储库。

go get会像下载它一样下载github.com/kr/fs,并将其放在$GOPATH/src,但由于它是命令,因此也会编译并创建一个$GOPATH/bin/godep二进制的。

Go命令被编译为所在文件夹的名称,在这种情况下,该文件夹是根文件夹,因此它是godep。在使用多个命令的情况下,最后一个子文件夹姓名。例如理想github.com/flaviocopes/tools/cmd/unzip将被编译为unzip。确实不是以包含main()功能。

工作空间

Go有一个非常独特的概念工作区。工作空间是文件夹结构,$GOPATH指着。创建新的工作区时,请添加$GOPATH/bin文件夹以及您的路径。例如,如果您要将工作空间设置为~/go(默认情况下是这样):

export GOPATH=~/go
export PATH=~/go/bin:$PATH

现在,您运行的所有Go代码都将引用此文件夹。尽管如上所述,这使您可以创建单独的工作区在官方文档中

Go程序员通常将所有Go代码保存在一个工作区中。

请注意,这与其他编程环境不同,在其他编程环境中,每个项目都有一个单独的工作区,并且这些工作区与版本控制存储库紧密相关。

这是一个工作区示例,在官方文档中列出:

    bin/
        hello                          # command executable
        outyet                         # command executable
    pkg/
        linux_amd64/
            github.com/golang/example/
                stringutil.a           # package object
    src/
        github.com/golang/example/
            .git/                      # Git repository metadata
        hello/
            hello.go               # command source
        outyet/
            main.go                # command source
            main_test.go           # test source
        stringutil/
            reverse.go             # package source
            reverse_test.go        # test source
        golang.org/x/image/
            .git/                  # Git repository metadata
        bmp/
            reader.go              # package source
            writer.go              # package source
        #... (many more repositories and packages omitted) ...

知道了这一点,让我们看看。

命令和软件包的放置位置

使用以下命令运行命令时go run,您可以在任何喜欢的地方放置项目,但这是一种仅对快速测试有用的方法。

您应该在$GOPATH/src文件夹,带有您唯一的名称空间,例如

$GOPATH/src/github.com/flaviocopes/hello

运行时(从系统中的任何位置)

go install github.com/flaviocopes/hello

Go将编译并放入hello二进制输入$GOPATH/bin,可以从系统中的任何位置运行。

包裹也是如此除了在跑步时go install,它将编译后的包放在$GOPATH/pkg

参考


更多教程: