我无法理解创建具有本地包的go项目的工作流程.
假设我创建了一个新项目,使用git进行版本控制,它有一个main.go文件和一个tools.go文件,它将在包utils中.所以我有一个目录结构,如下所示:
/myproject/
main.go
utils/
tools.go
Run Code Online (Sandbox Code Playgroud)
main.go看起来像这样:
package main
import "./utils"
func main() {
utils.DoSomthing()
}
Run Code Online (Sandbox Code Playgroud)
和tools.go看起来像这样:
package utils;
func DoSomething() {
}
Run Code Online (Sandbox Code Playgroud)
一切都在本地工作,使用go build和go run.但这是在github上托管的,我希望能够让其他人使用go get命令来安装它.因此必须更改本地包导入以使用格式"github.com/user/project/utils",这样可行,除了现在我有两个源代码副本,真正的问题是带有git历史的副本有一个导入,使用下载的副本.因此,如果我正在处理带有git历史记录的副本,那么对tools.go所做的任何更改都将被忽视,因为它将使用下载的副本.
所以我想知道是否有人可以解释在同一个项目中使用go get,版本控制和包导入的正确方法.
tux*_*21b 86
我刚刚写了一篇关于如何使用新的go工具和github.com的简短分步指南.您可能会发现它很有用:
1.设置你的GOPATH
您可以将环境变量设置为GOPATH
您喜欢的任何目录.如果您有更大的项目,那么为每个项目创建不同的GOPATH可能是个好主意.我建议这种方法特别适用于部署,因此更新项目A的库不会破坏项目B,这可能需要同一个库的早期版本.
另请注意,您可以将GOPATH设置为以冒号分隔的目录列表.因此,您可能拥有包含所有常用包的GOPATH,并为每个项目分别使用附加包或现有包的不同版本的GOPATHS.
但除非你同时处理很多不同的Go项目,否则它可能只在本地只有一个GOPATH.那么,让我们创建一个:
mkdir $HOME/gopath
Run Code Online (Sandbox Code Playgroud)
然后你需要设置两个环境变量来告诉go工具它可以找到现有的Go包,以及它应该在哪里安装新的包.最好将以下两行添加到您~/.bashrc
或~/.profile
(并且不要忘记之后重新加载.bashrc).
export GOPATH="$HOME/gopath"
export PATH="$GOPATH/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)
2.创建一个新项目
如果你想创建一个应该在github.com上托管的新Go项目,你应该在下面创建这个项目$GOPATH/src/github.com/myname/myproject
.路径与github.com repo的URL匹配很重要,因为go工具将遵循相同的约定.那么,让我们创建项目根并在那里初始化一个新的git存储库:
mkdir -p $GOPATH/src/github.com/myname/myproject
cd $GOPATH/src/github.com/myname/myproject
git init
Run Code Online (Sandbox Code Playgroud)
因为我不喜欢键入这么长的路径,所以我通常会为我目前在我的主文件夹中处理的项目创建符号链接:
ln -s $GOPATH/src/github.com/myname/myproject ~/myproject
Run Code Online (Sandbox Code Playgroud)
3.编写您的申请
开始编码,不要忘记git add
和git commit
您的文件.另外,不要像import "./utils"
子包那样使用相对导入.它们目前没有文档,根本不应该使用,因为它们不能与go工具一起使用.github.com/myname/myproject/utils
改为使用import .
4.发布您的项目
在github.com上创建一个新的存储库,如果您之前没有这样做,请上传您的SSH公钥并将更改推送到远程存储库:
git remote add origin git@github.com:myname/myproject.git
git push origin master
Run Code Online (Sandbox Code Playgroud)
5.继续处理您的项目
如果您已在.bashrc中设置了GOPATH,并且您已在主文件夹中为项目创建了符号链接,则可以在cd myproject/
那里键入和编辑某些文件.之后,您可以使用git commit -a
并通过执行a 将其发送到github.com来提交更改git push
.
Son*_*nia 10
您可能不需要两个源副本.按照如何编写Go代码,你应该有一个你开始Go开发的路径,让我们说"godev",然后在那个"src"目录下,你的"github.com/user/project"和"github.com/user/project/utils".(我同意,这看起来有点僵硬,但向我们解释的优势是免于制作文件.)放弃我的项目,这是你将完成工作的地方.
你至少会将GOPATH设置为godev,但是你可能希望你的GOPATH以一个不属于你的外部包的路径开始.例如我使用的GOPATH <my place on the file system>/goext:<my place on the file system>/godev
.
你是对的,你在main.go中的导入现在应该是"github.com/user/project/utils.
不要担心go get或任何go命令会覆盖你的文件或弄乱版本控制.通过GOPATH,他们可以看到您在哪里工作,他们知道版本控制的工作原理.
如果要将代码保存在本地版本存储库中,只需将代码放在GOPATH中即可.
GOPATH接受多条路径.例如.在linux上
GOPATH=$HOME/go:$HOME/prj/foo
Run Code Online (Sandbox Code Playgroud)
所以,您可以在$ HOME/go/src /中安装第三方软件包.并且,您可以将代码控制在$ HOME/prj/foo/src中.
参考: go help gopath
归档时间: |
|
查看次数: |
44262 次 |
最近记录: |