首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >去,去,去安装,本地包,和版本控制

去,去,去安装,本地包,和版本控制
EN

Stack Overflow用户
提问于 2012-04-12 19:23:25
回答 5查看 63.7K关注 0票数 68

我很难理解创建包含本地包的go项目的工作流。

假设我创建了一个新项目,使用git进行版本控制,它有一个main.go文件,一个tools.go文件,将在包实用程序中。所以我有一个目录结构,如下所示:

代码语言:javascript
复制
/myproject/
   main.go
   utils/
     tools.go

main.go看起来是这样的:

代码语言:javascript
复制
package main
import "./utils"
func main() {
    utils.DoSomthing()
}

tools.go看起来是这样的:

代码语言:javascript
复制
package utils;
func DoSomething() {
}

在本地一切都很好,使用go构建和go运行。但是这是托管在github上的,我希望其他人能够使用go get命令来安装它。因此,必须将本地包导入更改为使用"github.com/user/project/utils“格式,该格式可以工作,但现在我有两个源代码副本,真正的问题是带有git历史记录的副本具有使用下载副本的导入。因此,如果我使用git历史记录处理副本,那么对tools.go所做的任何更改都将被忽略,因为它将使用下载的副本。

因此,我想知道是否有人可以解释在同一个项目中使用get、版本控制和包导入的正确方法。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-04-13 14:05:19

我刚刚编写了一个关于如何使用新的围棋工具github.com的一小步一步的指南。你可能会发现它很有用:

1.设置你的

您可以将环境变量GOPATH设置为任何您喜欢的目录。如果您有更大的项目,那么为每个项目创建一个不同的GOPATH可能是个好主意。我建议采用这种方法,特别是在部署时,以便更新项目A的库不会破坏项目B,因为项目B可能需要同一个库的早期版本。

还请注意,您可以将GOPATH设置为由冒号分隔的目录列表。因此,您可能有一个包含所有常用包的GOPATH,并为每个带有附加包或现有软件包的不同版本的项目分别提供GOPATHS。

但是,除非你同时从事许多不同的围棋项目,否则在当地只有一个GOPATH就足够了。那么,让我们创建一个:

代码语言:javascript
复制
mkdir $HOME/gopath

然后,您需要设置两个环境变量,以告诉围棋工具在哪里可以找到现有的Go包,以及应该在哪里安装新的包。最好将以下两行添加到您的~/.bashrc~/.profile中(并且以后不要忘记重新加载.bashrc )。

代码语言:javascript
复制
export GOPATH="$HOME/gopath"
export PATH="$GOPATH/bin:$PATH"

2.创建一个新的项目

如果您想创建一个新的Go项目,稍后应该托管在github.com,那么您应该在$GOPATH/src/github.com/myname/myproject下创建这个项目。重要的是路径与github.com回购的URL匹配,因为go工具将遵循相同的约定。因此,让我们创建项目根并在那里初始化一个新的git存储库:

代码语言:javascript
复制
mkdir -p $GOPATH/src/github.com/myname/myproject
cd $GOPATH/src/github.com/myname/myproject
git init

由于我不喜欢键入如此长的路径,所以我通常会为我当前在主文件夹中处理的项目创建符号链接:

代码语言:javascript
复制
ln -s $GOPATH/src/github.com/myname/myproject ~/myproject

3.编写应用程序

开始编码,不要忘记git addgit commit你的文件。另外,不要对子包使用像import "./utils"这样的相对导入。它们目前是无文档化的,根本不应该使用,因为它们不能使用go工具。而是使用像github.com/myname/myproject/utils这样的导入。

4.发布项目

创建一个github.com的新存储库,如果以前还没有上传SSH公钥,然后将更改推到远程存储库:

代码语言:javascript
复制
git remote add origin git@github.com:myname/myproject.git
git push origin master

5.继续进行项目

如果在.bashrc中设置了GOPATH,并且在主文件夹中创建了指向项目的符号链接,则只需键入cd myproject/并在其中编辑一些文件即可。之后,您可以使用git commit -a提交更改,并通过执行git push将它们发送到github.com

票数 96
EN

Stack Overflow用户

发布于 2012-04-12 20:32:14

你可能不想要两份资料。在如何编写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,他们可以看到你在哪里工作,并且知道版本控制是如何工作的。

票数 10
EN

Stack Overflow用户

发布于 2012-05-05 05:19:20

如果希望将代码保存在本地版本存储库中,只需将代码放在GOPATH中即可。

GOPATH接受多条路径。例如:在linux上

代码语言:javascript
复制
GOPATH=$HOME/go:$HOME/prj/foo

所以,你可以把第三方软件包安装在$HOME/ go /src/.而且,可以将代码控制在$HOME/prj/foo/src中。

参考文献:go help gopath

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10130341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档