5

test0にパッケージをインストールしました$gopath\pkg\windows_386\hello\test0.aが、パッケージに依存するメインパッケージをビルドするtest0と、コンパイラは次のように表示しますimport "hello/test0": cannot find package

なぜこれが起こるのですか?

私は2つのgoファイルを持っています:

$gopath/src/hello.go

package main

import (
    "fmt"
    "hello/test0"
)

func main() {
    fmt.Println(test0.Number)
}

$gopath/src/hello/test0/test0.go

package test0

const (
    Number int = 255
)

最初に実行するgo install hello/test0と、生成されます$gopath\pkg\windows_386\hello\test0.a

次に、ディレクトリを削除します$gopath/src/hello

最後に、私は実行go build hello.goし、コンパイラは言ったhello.go:5:2: import "hello/test0": cannot find package

4

2 に答える 2

3

今のところ、これは通常は不可能なようです:https ://code.google.com/p/go/issues/detail?id=2775

多分Go1.1のために

デイブによるトリック(私はテストしなかった):

「hello」というパッケージの場合、goツールは$ GOPATH / src / helloで.goソースを検索し、.aファイルのタイムスタンプが.goファイルの最新のタイムスタンプより前の場合にのみ再構築します。.aファイルだけを受け入れるように騙す簡単な方法は、ダミーの.goファイルを正しいsrcディレクトリにドロップし、そのタイムスタンプを.aファイルのタイムスタンプより前に設定することです。

(これは、 golang-nutsで言われていることを使用したコミュニティの回答です)。

于 2012-06-25T16:09:42.703 に答える
0

なぜソースを削除したのですか?goツールのbuildコマンドは、パッケージとそのすべての依存関係をビルドするためのものです。これを行うために、パッケージのソースをチェックして、変更のためにビルドする必要があるかどうかを確認します。それらが見つからない場合は、インストールされていないかのように扱われます。

本当にバイナリディストリビューションだけを扱いたい場合は、コンパイラとリンカを直接使用する必要があります。それらに関するドキュメントはここにあります:http://golang.org/cmd/

于 2012-06-25T15:18:05.847 に答える