去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 build
和go install
尝试匹配的目录,而不是源文件。
- 设置
$GOPATH
到一个有效的目录,例如export GOPATH="$HOME/go"
- 移动
foobar.go
到$GOPATH/src/foobar/foobar.go
和build设应该工作得很好。
其他推荐步骤:
- 通过以下命令将
$GOPATH/bin
添加到$PATH
:PATH="$GOPATH/bin:$PATH"
- 将
main.go
移到$GOPATH/src
的子文件夹,例如$GOPATH/src/test
- 现在
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/