4

我正在尝试编译由多个模块组成的 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

现在,当我在包含and的目录中运行其中一个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如果 Go 要找到文件,文件应该放在哪里?

(谷歌围棋 1.0.2)

4

2 回答 2

8

我相信您应该阅读或重新阅读如何编写 Go 代码

简而言之:

将您的 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)

但导入路径与前一种情况相同。

于 2013-01-21T14:25:06.580 回答
3

好的,这似乎解决了它:

export GOPATH=`pwd`

显然,它需要是一个绝对路径。不过,我仍然发现错误消息非常令人困惑。

于 2013-01-21T14:36:23.703 回答