7

我对 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。如果我 cd 进入目录,它会抱怨它can't load package: package .: no Go source files

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

我究竟做错了什么?

4

2 回答 2

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) 的基础与 .git 存储库的基础不同$GOPATH

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

于 2013-09-30T17:57:40.030 回答
2

您可以将 go 代码保存在工作区中。一个工作区包含许多源文件(git、hg、svm 等)。Go 工具了解布局。我们在这里不需要Makefilebuild.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 开发。而且,围棋社区中的每个人都遵循同样的原则。这会将srcbinpkg放入主目录。而且,在创建工作区之前,$HOME/bin 已经在我们的路径中。

于 2017-02-04T19:07:24.180 回答