使用带有GVM的Go 1.2盖工具



我正在使用GVM来管理我的go安装和路径,一切似乎都很好——我可以运行测试和生成构建。我现在正试图生成一个代码覆盖率文件,但遇到了一些困难。

我的包在/home/bill/dev/server/model中定义。

当我运行时:

$ go test -cover -coverprofile cover.out

测试成功运行,并生成覆盖率文件。但是,覆盖范围文件中的路径如下所示:

_/home/bill/dev/server/model/activity.go:19.34,21.2 1 1

当我试图创建一个html封面文件时,我得到了以下错误:

$ go tool cover -html=cover.out
cover: can't find "activity.go": cannot find package "_/home/bill/dev/server/model/" in any of:
/home/bill/.gvm/gos/go1.2/src/pkg/_/home/bill/dev/server/model (from $GOROOT)
/home/bill/.gvm/pkgsets/go1.2/global/src/_/home/bill/dev/server/model (from $GOPATH)

我该如何解决这个问题?

其他详细信息

~ gvm use go1.2
Now using version go1.2
~ echo $GOPATH
/home/bill/.gvm/pkgsets/go1.2/global
~ echo $GOROOT
/home/bill/.gvm/gos/go1.2

我尝试手动设置$GOPATH,但这并没有改变cover.out文件。我还尝试手动编辑cover.out文件,但我不知道它到底想要什么路径。在上面显示的默认配置中,运行go test会按预期运行。

试图修复GOPATH

~ export GOPATH=/home/bill/dev/
~ ln -s /home/bill/dev/server /home/bill/.gvm/gos/go1.2/src
~ go test
cannot find package "code.google.com/p/go.crypto/pbkdf2" in any of:
/home/bill/.gvm/gos/go1.2/src/pkg/code.google.com/p/go.crypto/pbkdf2 (from $GOROOT)
/home/bill/dev/src/code.google.com/p/go.crypto/pbkdf2 (from $GOPATH)
../util/log.go:4:2: cannot find package "github.com/kr/pretty" in any of:
/home/bill/.gvm/gos/go1.2/src/pkg/github.com/kr/pretty (from $GOROOT)
/home/bill/dev/src/github.com/kr/pretty (from $GOPATH)

这些是我以前使用go get下载的附加依赖项。它们最终出现在$GOPATH曾经指向的/home/bill/.gvm/pkgsets/go1.2/global/src中。所以我更改了GOPATH

~ export GOPATH=/home/bill/dev/:/home/bill/.gvm/pkgsets/go1.2/global

因此,测试再次运行,但cover.out文件中仍然有相同的目录,并且仍然给我相同的错误。

以下是获得GVM所有优势的方法,而不必破坏此处所述的理想go开发环境,也不必求助于笨拙的特殊情况符号链接技巧。

假设我已经根据~/go中的标准设置了所有的开发(所以我的github中的包foo将在~/go/github.com/gepoch/foo中)

首先,我们将特别使用pkgset,它将愉快地引用我们的开发环境。简单运行:

$ gvm pkgset create dev

这将添加pkgset。接下来,我们可以对它的确切路径进行一些定制。运行:

$ gvm pkgenv dev

您应该会看到您最喜欢的文本编辑器弹出,其中包含一堆环境变量定义。只需更改GOPATH条目,即可包含您的开发根目录!例如,我更改了这个:

export GOPATH; GOPATH="$GVM_ROOT/pkgsets/go1.2/dev"

进入:

export GOPATH; GOPATH="$GVM_ROOT/pkgsets/go1.2/dev:$HOME/go"

此外,让gvm通过更改以下内容正确设置您的路径:

export PATH; PATH="${GVM_ROOT}/pkgsets/go1.2/global/bin:${GVM_ROOT}/gos/go1.2/bin:${GVM_OVERLAY_PREFIX}/bin:${GVM_ROOT}/bin:${PATH}"

进入这个:

export PATH; PATH="${GVM_ROOT}/pkgsets/go1.2/global/bin:${GVM_ROOT}/gos/go1.2/bin:${GVM_OVERLAY_PREFIX}/bin:${GVM_ROOT}/bin:${PATH}:$HOME/go/bin"

重新启动你的终端,就这样!无论何时运行$ gvm pkgset use dev,都可以轻松访问开发环境。

这意味着(在许多其他事情中)这是按预期工作的:

$ go test -coverprofile=coverage.out github.com/gepoch/foo
$ go tool cover -html=coverage.out

您可以将其添加到任何您想要的pkgset环境中,以便轻松访问dev树。

一个月前我也遇到了同样的问题。我通过以下步骤解决了这个问题。

我的包裹名称叫alpaca

我的工作目录(代码)是/home/pksunkara/coding/alpaca

$ gvm use go1.2
Now using version go1.2
$ echo $GOPATH
/usr/local/lib/gvm/pkgsets/go1.2/global
$ echo $GOROOT
/usr/local/lib/gvm/gos/go1.2

为了解决这个问题,我做了这个

$ mkdir -p $GOPATH/src/github.com/pksunkara
$ ln -s /home/pksunkara/coding/alpaca $GOPATH/src/github.com/pksunkara/alpaca

基本上,我必须将当前工作文件夹链接到$GOPATH/src文件夹,alpaca的结果包路径变成github.com/pksunkara/alpaca

现在,go测试&封面工作如下

$ go test -coverprofile=coverage.out github.com/pksunkara/alpaca
$ go tool cover -html=coverage.out

这很重要

为了解决这个问题,我跌跌撞撞了很多。我尝试过各种各样的事情,包括你尝试过的。我通过阅读golang中的代码组织了解了这个问题,这应该是每个使用go的人的必读书目。

这里提到的代码组织对于使用golang非常重要。

包路径对golang很重要。在golang中导入时,您不应该使用本地路径。它们会起作用,但不推荐使用。

假设您的软件包名称为model。您可以简单地将model目录链接到$GOPATH/src/model,然后您将有一个名为model的包路径,您可以使用import "model"导入该路径。但为了避免冲突,go建议使用更大的包路径名。

我建议您将其链接到$GOPATH/src/bill.com/server/model并将其导入为import "bill.com/server/model"。与./query./util类似。

如果您仍有疑问,请询问。我会尽力解释更多。

你有没有试着在gvm的开发者网站上发布一个问题?https://github.com/moovweb/gvm(我不确定这是主要网站吗)

双击由gvm设置的$GOPATH的值。

我会尝试手动将$GOPATH设置为/home/bill(带有符号链接src->dev),以进行测试,只是为了看看go test-cover是否会生成包含正确文件路径的文件

相关内容

  • 没有找到相关文章

最新更新