使用go build时如何解决“未设置GOPATH”错误

时间:2019-11-05 10:36:34

标签: go

我正在尝试构建一些go项目。从项目目录运行go build会返回以下错误:

../../../github.com/getsentry/sentry-go/integrations.go:4:2: cannot find package "bufio" in any of:
    /home/user/go/src/bufio (from $GOROOT)
    ($GOPATH not set. For more details see: 'go help gopath')
vendor/github.com/getsentry/raven-go/client.go:5:2: cannot find package "bytes" in any of:
    /home/user/go/src/gitlab.com/company/bc_to_influx/vendor/bytes (vendor tree)
    /home/user/go/src/bytes (from $GOROOT)
    ($GOPATH not set. For more details see: 'go help gopath')
vendor/github.com/getsentry/raven-go/client.go:6:2: cannot find package "compress/zlib" in any of:
    /home/user/go/src/gitlab.com/company/bc_to_influx/vendor/compress/zlib (vendor tree)
    /home/user/go/src/compress/zlib (from $GOROOT)
    ($GOPATH not set. For more details see: 'go help gopath')
../../../github.com/getsentry/sentry-go/client.go:4:2: cannot find package "context" in any of:
    /home/user/go/src/context (from $GOROOT)
    ($GOPATH not set. For more details see: 'go help gopath')
vendor/github.com/getsentry/raven-go/client.go:7:2: cannot find package "crypto/rand" in any of:
    /home/user/go/src/gitlab.com/company/bc_to_influx/vendor/crypto/rand (vendor tree)
    /home/user/go/src/crypto/rand (from $GOROOT)
    ($GOPATH not set. For more details see: 'go help gopath')

,依此类推,获取项目所需的各种软件包。 出现了许多问题:

  • GOPATH被声明为“未设置”,而实际上它设置为“ / home / user / go”,正如我通过运行go env所看到的(顺便说一句,GOROOT设置为“ / home / user / go”,我认为这可能会造成一些麻烦,因为我了解GOPATH和GOROOT应该有所不同)

  • go似乎在“ / home / user / go / src / bufio”中查找诸如bufio之类的软件包,而我希望它在“ / home / user / go / src / github”中进行搜索。 com / bufio”

一种解决方法是使用sudo go build,它可以正常工作,但我想正确地解决此问题。对于root用户,将GOPATH设置为“ / root / go”,将GOROOT设置为“ / snap / go / 4762”。

我正在使用govendor,并且GO111MODULE设置为关闭。

1 个答案:

答案 0 :(得分:1)

这都是错误的。

  1. go env不能像printenv那样工作::它打印使用值,这些值是故意设置的值或默认值。您的GOPATH未设置,go env打印默认值。

  2. 从不,实际上从不设置GOROOT。决不。 GOROOT适用于从事专家工作的专家。如果您已正确设置Go安装程序,则不需要 来构建,编译,测试普通的Go代码。

  3. 永远不要sudo go whatever。须藤不是神奇的制作工具!!锤子。

  4. govendor的自述文件:使用Go模块

别再试图变得聪明了。根据官方安装说明安装Go,请勿与GOROOT混淆。设置或不设置GOPATH。如果在GOPATH模式下工作,则您必须 go get自己依赖于编译代码。使用Go模块。