32

从 Golang 教程中我不清楚如何将 Golang 代码放到 Github 以便以后能够从 Github 将该代码作为包导入。

这是来自 Golang 教程http://golang.org/doc/code.html的示例项目工作区(目录结构):

bin/
    hello              # command executable
pkg/
    linux_amd64/       # this will reflect your OS and architecture
        github.com/user/
            newmath.a  # package object
src/
    github.com/user/
        hello/
            hello.go   # command source
        newmath/
            sqrt.go    # package source

那么,我需要做什么,我需要git init在这个工作区中的哪个位置,以便以后能够:

  1. 仅将newmath包导入我的某个单独项目。这边走:

    import "github.com/user/newmath"
    
  2. 只获得hello.exe可执行文件。

  3. 获取整个项目工作区(所有目录:bin、pkg、src)。

4

3 回答 3

37
  1. 对于包newmath,它与(稍后 2.)相同

    $ mkdir $GOPATH/src/github.com/username/newmath
    $ cd $GOPATH/src/github.com/username/newmath
    $ git init
    $ ... more git setup
    $ touch sqrt.go
    $ gvim sqrt.go
    $ git add sqrt.go
    $ git commit -a -m 'Inital commit'
    $ git push
    

    现在人们可以做

    $ go get github.com/username/newmath
    

    import "github.com/username/newmath"

    现在应该在他们的来源中工作。该软件包将根据需要自动安装。

  2. 我会假设hello命令和newmath包是不相关的,或者没有足够紧密的关系属于一个单一的存储库。

    $ mkdir $GOPATH/src/github.com/username/hello
    $ cd $GOPATH/src/github.com/username/hello
    $ git init
    $ ... more git setup
    $ touch hello.go
    $ gvim hello.go
    $ git add hello.go
    $ git commit -a -m 'Inital commit'
    $ git push
    

    现在人们可以做

    $ go get github.com/username/hello
    $ go install github.com/username/hello
    

    安装你的命令hello

    • $GOPATH/pkg在托管服务上发布内容几乎没有任何意义。
    • 在托管服务上发布内容是有意义的$GOPATH/bin但出于显而易见的原因,我不鼓励这种做法。此外,如果您要发布源 - 二进制文件不是必需的,每个人都可以构建自己的(受信任的)。

您似乎对“工作区”一词仍然有些困惑。一个工作区通常在开发人员的机器上只存在一次,但它通常包含多个存储库。一些由开发人员编写,另一些是从 Internet 上“获取”的。在这种情况下发布整个 wokspace 是没有意义的。

但是,有些人为每个项目或每个存储库甚至每个包使用单独的工作区。我不知道有什么好处。或者更好地说,我认为与单个工作区相比,没有任何东西可以定义为,说export GOPATH=$HOME(就像我多年来的情况一样,多年来没有任何麻烦)。

于 2013-06-03T16:41:24.107 回答
2

查看此链接以获取更多详细信息:

github go wiki on github 代码布局

以下是永久部分:

该应用程序和两个库都位于 Github 上,每个库都位于自己的存储库中。$GOPATH 是项目的根目录 - 您的每个 Github 存储库都将在 $GOPATH 下的几个文件夹中检出。

您的代码布局如下所示:

$GOPATH/
src/
    github.com/
        jmcvetta/
            useless/
                .git/
                useless.go
                useless_test.go
                README.md
            uselessd/
                .git/
                uselessd.go
                uselessd_test.go
                README.md

src/github.com/jmcvetta/ 下的每个文件夹都是单独的 git checkout 的根目录。

于 2016-07-28T01:49:18.990 回答
0

如果您不是 git cli 的粉丝,那么您真正需要做的就是通过 Web 界面上传到 github repo。只要确保你的包名与 repo 相同(小写),你就可以开始使用了。我对 github.com/Digitalblueeye/enroute 为我的 REST API 库做了同样的事情。

于 2016-08-06T19:55:14.993 回答