去建:“找不到包”(即使GOPATH设置)(Go build: “Cannot find packa

2019-07-03 12:52发布

尽管我已经GOPATH正确设置,我还是不能让“去打造”或“去运行,”寻找我自己的包。 我究竟做错了什么?

$ echo $GOROOT
/usr/local/go

$ echo $GOPATH
/home/mitchell/go

$ cat ~/main.go
package main
import "foobar"
func main() { }

$ cat /home/mitchell/go/src/foobar.go
package foobar

$ go build main.go
main.go:3:8: import "foobar": cannot find package

Answer 1:

这是行不通的,因为你的foobar.go源文件不是一个目录名为foobargo buildgo install尝试匹配目录,而不是源文件。

  1. 设置$GOPATH有效的目录,如export GOPATH="$HOME/go"
  2. 移动foobar.go$GOPATH/src/foobar/foobar.go和建筑应该只是罚款。

其他推荐的步骤:

  1. 添加$GOPATH/bin到你的$PATH是: PATH="$GOPATH/bin:$PATH"
  2. 移动main.go到的子文件夹$GOPATH/src ,如$GOPATH/src/test
  3. go install test现在应该创建一个可执行$GOPATH/bin ,可以通过输入被称为test到你的终端。


Answer 2:

编辑:既然你的意思GOPATH,看到fasmat的答案 (upvoted)

正如提到的“ 如何让我去找我的包? ”,你需要把一个包xxx目录中的xxx

见转到语言规范 :

package math

一组文件共享相同的PackageName形成计划的落实。
实现可能需要一个包所有源文件居住在同一个目录下。

该代码组织提到:

当构建导入包装程序“ widget的” go命令查找src/pkg/widget转到根里面,然后,如果包源没有找到,它会搜索src/widget ,以便每个工作区里。

(一“工作区”是在路径条目GOPATH :该变量可以参考为你的“多个路径src, bin, pkg ”是)


(原来的答复)

你也应该设置GOPATH到〜/去,不GOROOT ,如“说明如何写Go代码 ”。

转到路径来解决import语句。 它是由执行,并在去/编译包记录。

GOPATH环境变量列出地方寻找Go代码。
在Unix,该值是一个冒号分隔的字符串。
在Windows中,该值是一个分号分隔的字符串。
在Plan 9,值是一个列表。

这是从不同的GOROOT

转到二进制分发假设它们将被安装在/usr/local/go (或c:\Go Windows下),但也可以在不同的位置进行安装。
如果你这样做,你将需要设置GOROOT使用Go工具时环境变量到该目录。



Answer 3:

TL; DR:按照惯例去! (教训硬盘的方式),检查旧版本去,并删除它们。 安装最新的。

对我来说,解决方案是不同的。 我曾在共享Linux服务器上,并验证我的后GOPATH和其他环境变量几次它仍然没有奏效。 我遇到的几个错误,包括“无法找到包”和“无法识别的导入路径”。 试图与重新安装后, 该解决方案通过在指令golang.org (包括卸载部分)仍然遇到的问题。

我花了一些时间来认识到,仍有尚未卸载旧版本(运行go versionwhich go这让我再次... DAHH) 这个问题终于解决了。



Answer 4:

您是否尝试过加入的绝对目录到“路径”?

export PATH=$PATH:/directory/to/go/


文章来源: Go build: “Cannot find package” (even though GOPATH is set)
标签: build go package