去build立:“无法find包”(即使GOPATH设置)

即使我已经正确设置了GOPATH,我仍然无法“去build造”或“跑步”find我自己的软件包。 我究竟做错了什么? 非常感谢!

$ 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 

它不起作用,因为你的foobar.go源文件不在foobar目录中。 go buildgo install尝试匹配的目录,而不是源文件。

  1. 设置$GOPATH到一个有效的目录,例如export GOPATH="$HOME/go"
  2. 移动foobar.go$GOPATH/src/foobar/foobar.go和build设应该工作得很好。

其他推荐步骤:

  1. 通过以下命令将$GOPATH/bin添加到$PATHPATH="$GOPATH/bin:$PATH"
  2. main.go移到$GOPATH/src的子文件夹,例如$GOPATH/src/test
  3. 现在go install test应该在$GOPATH/bin中创build一个可执行文件,可以通过在terminal中inputtest来调用它。

编辑:因为你的意思是GOPATH,请参阅fasmat的答案 (upvoted)

正如在“ 如何让我find我的软件包? ”中所提到的那样,您需要将xxx包放在xxx目录中。

请参阅Go语言规范 :

 package math 

一组共享相同PackageName形成一个包的实现。
一个实现可能要求一个包的所有源文件都在相同的目录中。

守则组织提到:

当构build一个导入包“ widget ”的程序时, go命令会在Go根目录中查找src/pkg/widget ,然后 – 如果没有find包源,它会按顺序在每个工作区内searchsrc/widget

(“工作空间”是GOPATH一个path条目:该variables可以为你的' src, bin, pkg '引用多个path)


(原文答案)

您也应该将GOPATH设置为〜/ go,而不是GOROOT ,如“ 如何编写Go代码 ”所示。

Gopath用于parsing导入语句。 它由go / build包实现并logging在文件中。

GOPATH环境variables列出了寻找Go代码的地方。
在Unix上,该值是冒号分隔的string。
在Windows上,该值是以分号分隔的string。
在计划9中,该值是一个列表。

这与GOROOT不同:

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

你有没有尝试添加到你的'path'的绝对目录?

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