如何将Golang项目(一组包)放到Github?

时间:2013-06-03 15:58:14

标签: go

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)。

3 个答案:

答案 0 :(得分:35)

  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的内容会使有些意义。但我很明显地劝阻这种做法 原因。此外,如果您要发布消息来源 - 二进制文件不是必需的,每个人都可以构建他们的(可信的) 自己的。
  3. 你似乎对术语“工作空间”感到有些困惑。工作空间通常只在开发人员的计算机上存在一次,但它通常包含多个存储库。一些是由开发人员撰写的,其他人则是#get;"来自网络。在这种情况下发布整个wokspace毫无意义。

    但是,每个项目或每个存储库或甚至每个包都有人使用单独的工作区。我不知道有什么好处。或者更好地说,我认为没有比单一的工作空间(由export GOPATH=$HOME定义的那样)(多年来我一直没有遇到任何麻烦)。

答案 1 :(得分:2)

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

github go wiki on github code layout

以下是永久性部分:

  

应用程序和两个库都存放在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的根目录。

答案 2 :(得分:0)

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