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
,以便以后能够:
仅将newmath
包导入我的某个单独项目中。这样:
import "github.com/user/newmath"
仅获取hello.exe
可执行文件。
获取整个项目工作区(所有目录:bin,pkg,src)。
答案 0 :(得分:35)
对于包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"
现在应该在他们的来源中工作。该软件包将被安装 需求自动。
我假设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
的内容会使有些意义。但我很明显地劝阻这种做法
原因。此外,如果您要发布消息来源 -
二进制文件不是必需的,每个人都可以构建他们的(可信的)
自己的。你似乎对术语“工作空间”感到有些困惑。工作空间通常只在开发人员的计算机上存在一次,但它通常包含多个存储库。一些是由开发人员撰写的,其他人则是#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库做了同样的事。