使用带有GVM的Go 1.2封面工具

Bil*_*ill 8 code-coverage go gvm

我正在使用GVM来管理我的安装和路径,一切似乎都运行得很好 - 我可以运行测试并生成构建.我现在正在尝试生成代码覆盖文件,并且遇到了一些困难.

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

当我跑:

$ go test -cover -coverprofile cover.out
Run Code Online (Sandbox Code Playgroud)

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

_/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)
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

额外细节

~ 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
Run Code Online (Sandbox Code Playgroud)

我尝试手动设置我的$ 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)
Run Code Online (Sandbox Code Playgroud)

这些是我之前使用的其他依赖项go get.它们最终出现在$ GOPATH过去指向的/home/bill/.gvm/pkgsets/go1.2/global/src中.所以我改变了GOPATH

~ export GOPATH=/home/bill/dev/:/home/bill/.gvm/pkgsets/go1.2/global
Run Code Online (Sandbox Code Playgroud)

这样测试再次运行,但是cover.out文件仍然有相同的目录,但仍然给我相同的错误.

gep*_*och 12

这是获得GVM所有优势的方法,而不必破坏这里描述的理想的开发环境,而不必诉诸于笨重的特殊情况符号链接黑客.

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

首先,我们将制作一个特殊用途的pkgset,它将很乐意参考我们的开发环境.简单地运行:

$ gvm pkgset create dev
Run Code Online (Sandbox Code Playgroud)

这将添加pkgset.接下来,我们可以对go路径的确切位置进行一些自定义.跑:

$ gvm pkgenv dev
Run Code Online (Sandbox Code Playgroud)

你应该看到你最喜欢的文本编辑器弹出一堆环境变量定义.只需更改GOPATH条目即可包含您的dev root!例如,我改变了这个:

export GOPATH; GOPATH="$GVM_ROOT/pkgsets/go1.2/dev"
Run Code Online (Sandbox Code Playgroud)

进入:

export GOPATH; GOPATH="$GVM_ROOT/pkgsets/go1.2/dev:$HOME/go"
Run Code Online (Sandbox Code Playgroud)

另外,通过更改以下内容让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}"
Run Code Online (Sandbox Code Playgroud)

进入这个:

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"
Run Code Online (Sandbox Code Playgroud)

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

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

$ go test -coverprofile=coverage.out github.com/gepoch/foo
$ go tool cover -html=coverage.out
Run Code Online (Sandbox Code Playgroud)

您可以将其添加到您希望的任何pkgset环境中,以便轻松访问开发树.


Pav*_*ara 9

一个月前我遇到了同样的问题.我通过使用以下步骤解决了它.

我的包名称被调用 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
Run Code Online (Sandbox Code Playgroud)

为了解决这个问题,我做到了这一点

$ mkdir -p $GOPATH/src/github.com/pksunkara
$ ln -s /home/pksunkara/coding/alpaca $GOPATH/src/github.com/pksunkara/alpaca
Run Code Online (Sandbox Code Playgroud)

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

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

$ go test -coverprofile=coverage.out github.com/pksunkara/alpaca
$ go tool cover -html=coverage.out
Run Code Online (Sandbox Code Playgroud)

这个很重要

我偶然发现了很多东西来解决这个问题.我尝试过各种各样的事情,包括你尝试过的事情.我通过阅读golang中的代码组织来理解这个问题,对于每个使用go的人来说,这应该是必读的.

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

包路径对golang很重要.在golang中导入时,不应该使用本地路径.他们会工作,但不建议这样做.

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

我建议你把它链接到$GOPATH/src/bill.com/server/model并导入它import "bill.com/server/model".以相若方式./query./util你有.

如果您仍有疑问,请询问.我会尝试解释更多.