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

ここで、との両方を含むディレクトリでいずれかgo run main.goまたはgo build後に実行すると、次のように出力されます。export GOPATH=.main.gosrc

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

わかりません。ls -l src/disjsets/disjsets.go確認どおり、ファイルはそこにあります。これはどのように起こりますか?disjsets.goGoがファイルを見つける場合、ファイルはどこに保存する必要がありますか?

(Google 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)

そのディレクトリ内のパッケージには、パッケージファイルが含まれます。たった1つしかないとします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 に答える