go get / build无法解析仅限本地的项目包

时间:2013-12-04 16:56:24

标签: go

project.go:6:2: cannot find package "example.com/project/package" in any of:
    /usr/local/Cellar/go/1.1.2/libexec/src/pkg/example.com/project/package (from $GOROOT)
    /Users/me/go/src/example.com/project/package (from $GOPATH)


Fetching https://example.com/project/package?go-get=1 
ignoring https fetch with status code 404 Fetching http://example.com/project/package?go-get=1 
Parsing meta tags from http://example.com/project/package?go-get=1 (status code 404)     
import "example.com/project/package": parse http://example.com/project/package?go-get=1: no go-import meta tags 
package example.com/project/package: unrecognized import path "example.com/project/package"

为什么不能去/ build找到本地包。我明白go get会因为它的存在而失败,因为它是裸的,但似乎go get完全忽略了本地文件,迫使我提交并推送我的代码然后才能编译它。根据片段,这是通过brew安装的OSX 10.8和Go 1.1.2。 GOPATH设置为/ Users / me / go,GOROOT为空。

我应该注意在我的Windows机器上使用go get gitbash时根本没有这个问题。我已经尝试了所有我想到的谷歌搜索这个,但是每个人都声称你可以使用相对的“项目/包”导入,在这种情况下也完全失败。

2 个答案:

答案 0 :(得分:3)

从go1.1.2升级到go1.2到brew upgrade go解决了这个问题

答案 1 :(得分:2)

您可以在本地处理代码而无需推送它 - 您只需要使用文件夹结构来模仿导入路径。

将您的库代码放在src/目录中,文件夹结构模仿导入路径:

[15:42] foa:home $ tree
.
├── myprogram.go
└── src
    └── example.com
        └── project
            └── mypackage
                └── mypackage.go

然后将GOPATH设置为其中包含src/的目录,您将能够构建项目:

[15:42] foa:home $ export GOPATH=`pwd`
[15:42] foa:home $ go build

这是myprogram.go

package main

import "example.com/project/mypackage"

func main() {
    mypackage.Run()
}

mypackage.go

package mypackage

import "fmt"

func Run() {
    fmt.Println("It works.")
}

通常像这样布置你的工作目录,然后在最低级别(例如在src/example.com/project/mypackage)中根据实际的git存储库,以便它们与go get和{{1}一起干净地工作}对于其他用户。