我正在尝试编译由多个模块组成的Go程序,如下所示:
// main.go
package main
import "mst"
// do something interesting involving minimum spanning trees
// src/mst/kruskal.go
import "disjsets"
// Kruskal's algorithm follows
// src/disjsets/disjsets.go
// implements disjoint sets with union-find
现在,当我在包含go run main.go
和go build
的目录中的export GOPATH=.
之后运行main.go
或src
时,会打印
# disjsets
open src/disjsets/disjsets.go: No such file or directory
我不懂。文件在ls -l src/disjsets/disjsets.go
确认。怎么会发生这种情况?如果要找到它,disjsets.go
文件应该在哪里生效?
(Google Go 1.0.2)
答案 0 :(得分:7)
我相信你应该阅读或重新阅读How to Write Go code
简而言之:
将GOPATH设置到某处并将其导出。然后将一些包blah
放入目录
$GOPATH/src/foo/bar/baz/blah # (1)
或
$GOPATH/src/blah # (2)
或
$GOPATH/src/qux/blah # (3) etc.
将blah
导入其他软件包
import "foo/bar/baz/blah" // (1)
或
import "blah" // (2)
或
import "qux/blah" // (3)
该目录中的包将包含包文件。假设您只有一个,blah.go
。那么它的位置将是
$GOPATH/src/foo/bar/baz/blah/blah.go // (1)
$GOPATH/src/blah/blah.go // (2)
$GOPATH/src/qux/blah/blah.go // (3)
如果命名了blah包源文件,请改为proj.go
,然后
$GOPATH/src/foo/bar/baz/blah/proj.go // (1)
$GOPATH/src/blah/proj.go // (2)
$GOPATH/src/qux/blah/proj.go // (3)
但导入路径与前一种情况相同。
答案 1 :(得分:2)
好的,这似乎可以解决它:
export GOPATH=`pwd`
显然,它需要是一条绝对的道路。不过,我仍然觉得错误信息非常混乱。