为什么“go build”无法找到包裹?

时间:2012-06-25 05:35:37

标签: package go

我在test0安装了$gopath\pkg\windows_386\hello\test0.a包,但是当我构建一个依赖于test0包的主包时,编译器会说:import "hello/test0": cannot find package

为什么会这样?

我有两个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

2 个答案:

答案 0 :(得分:3)

目前通常不可能:https://code.google.com/p/go/issues/detail?id=2775

也许是Go1.1

Dave的一个技巧(我没有测试):

  

对于名为“hello”的包,go工具将查找.go源代码   $ GOPATH / src / hello,仅在.a文件的时间戳为的时重建   在.go文件的最新时间戳之前。愚弄它的简单方法   只接受.a文件就是删除一个虚拟的.go文件   更正src目录并将其时间戳设置为.a之前的时间戳   文件。

(这是社区答案,使用what is said on golang-nuts)。

答案 1 :(得分:0)

为什么要删除这些来源? go工具中的build命令用于构建包及其所有依赖项。为此,它会检查包的来源,看看是否需要根据更改来构建它们。如果找不到它们,它会将它们视为未安装。

如果您真的只想处理二进制发行版,则需要直接使用编译器和链接器。您可以在此处找到有关这些文档的文档:http://golang.org/cmd/

相关问题