正确的Go项目目录结构?

时间:2013-09-30 17:26:18

标签: go

我是Go的新手,我最近创建了一个在GitHub上升的项目。我试图关注指南但是有一个紧迫的问题,为什么我的二进制文件最终会进入src/

我的布局是这样的:

ssm/ - Name of project
    LICENSE
    README.md
    src/ - Source Code
        files.go - All my source code is here.
        src - The compiled binary ends up here
    bin/ - Binaries

我将$GOPATH设置为~/Documents/Programming/Go/。从我的gopath,我无法键入go build ssm,因为它cannot find package。如果我进入目录,它会抱怨它can't load package: package .: no Go source files

我必须实际进入src并在那里编译,这意味着二进制文件不在bin/中。

我做错了什么?

2 个答案:

答案 0 :(得分:8)

请参阅https://code.google.com/p/go-wiki/wiki/GithubCodeLayout

要与go get兼容,您的项目的包名称需要在github.com域下完全合格:

$GOPATH/
    src/github.com/<user>/ssm/
        .git
        LICENSE
        README.md
        files.go
    bin/

请注意,git存储库(.git)的基础与$GOPATH不同。

此外,go build <package>会将已编译的可执行文件输出到当前目录。如果您希望exe转到bin/,请改用go install <package>

答案 1 :(得分:2)

您可以保存在工作区中的代码。工作区包含许多源文件(git,hg,svm等)。 Go工具了解布局。我们在此处不需要 Makefile build.xml 。基本目录布局就是一切。如果在任何情况下如果要更改文件布局,则需要更改构建。

这是您可以遵循的一般结构,

$ GOPATH /

src/
    github.com/username/repo/
        mypkg/
            mysrc1.go
            mysrc2.go
        cmd/mycmd/
            main.go
bin/
    mycmd

而且,这是标准工作区

$ GOPATH /

bin/fixhub                              # installed binary
pkg/darwin_amd64/                       # compiled archives
    code.google.com/p/goauth2/oauth.a
    github.com/...
src/                                    # source repositories
    code.google.com/p/goauth2/
        .hg
        oauth                           # used by package go-github
        ...
    github.com/
        golang/lint/...                 # used by package fixhub
            .git
        google/go-github/...            # used by package fixhub
            .git
        dsymonds/fixhub/
            .git
            client.go
            cmd/fixhub/fixhub.go        # package main

go get 获取许多存储库,而 go install 构建一个二进制文件。方便快捷地进行开发很方便。并且,go社区中的每个人都遵循相同的原则。这会将 src bin pkg 放入主目录。并且,在创建我们的工作区之前, $ HOME / bin已经在我们的路径中。