Go编译器的意思是“没有这样的文件或目录”?

时间:2013-01-21 14:07:31

标签: go

我正在尝试编译由多个模块组成的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.gogo build的目录中的export GOPATH=.之后运行main.gosrc时,会打印

# disjsets
open src/disjsets/disjsets.go: No such file or directory

我不懂。文件在ls -l src/disjsets/disjsets.go确认。怎么会发生这种情况?如果要找到它,disjsets.go文件应该在哪里生效?

(Google Go 1.0.2)

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`

显然,它需要是一条绝对的道路。不过,我仍然觉得错误信息非常混乱。