为什么"go build"找不到包?

5
我安装了一个名为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


“go build” 的文档似乎没有暗示它可以在没有源代码的情况下工作。你有类似构建逻辑的参考资料吗? - Denys Séguret
谢谢。你能告诉我如何做吗? - lianggo
很抱歉,我不知道如何在Go1中完成这个任务(我只做开源)。我甚至不知道.a文件是否包含了所有所需的内容。但这是一个非常有趣的问题,我希望有人能够回答。如果不能,也许你应该向golang-nuts提问。 - Denys Séguret
2个回答

3

目前似乎无法正常实现:https://code.google.com/p/go/issues/detail?id=2775

也许在Go1.1版本中可以实现。

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

对于名为“hello”的包,go工具将在$GOPATH / src / hello中查找.go源文件,并仅在.a文件的时间戳早于.go文件的最新时间戳时重新构建。欺骗它接受只有.a文件的简单方法是在正确的src目录中放置一个虚拟的.go文件,并将其时间戳设置为早于.a文件的时间戳。

(这是一个社区答案,使用golang-nuts上的说法)。


0

你为什么删除了源代码?go工具中的构建命令是用于构建一个包及其所有依赖项的。为此,它会检查包的源代码以查看是否需要由于更改而进行构建。如果找不到它们,它将视为未安装。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接