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

4

2 回答 2

3

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

也许对于 Go1.1

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

对于名为“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 回答