去构建找不到包

时间:2014-03-08 18:21:25

标签: go

问题

通过查看相关问题,我无法找到解决方案。我不知道是什么让我的Go环境与规范设置不同。

go env返回

GOROOT="/usr/lib/go"
GOBIN=""
GOARCH="386"
GOCHAR="8"
GOOS="linux"
GOEXE=""
GOHOSTARCH="386"
GOHOSTOS="linux"
GOTOOLDIR="/usr/lib/go/pkg/tool/linux_386"
GOGCCFLAGS="-g -O2 -fPIC -m32 -pthread"
CGO_ENABLED="1"

tree $GOPATH返回

/home/USER/go
├── bin
├── pkg
│   └── linux_386
│       └── bitbucket.org
│           └── USER-NAME
│               └── PROJECT
│                   └── my_package.a
└── src
    └── bitbucket.org
        └── USER-NAME
            └── PROJECT
                ├── main
                │   ├── main.go
                └── my_package
                    └── my_package.go

(ALL-CAPS是替换)

main.go包含

package main

import (
        "bitbucket.org/USER-NAME/PROJECT/my_package"
)

func main() {
        my_package.Foo()
}

go build目录中调用main会返回import "my_package": cannot find package

Volker指出go env也应该返回GOPATH条目。 The source of the env command证实了这一点。但是,在bash中运行echo $GOPATH或在Go中运行os.Getenv("GOPATH")都会返回\home\USER\go。我不确定为什么go env没有返回相同内容。

解决方案

当我遇到这个问题时,我正在运行Go 1.0。当我升级到Go 1.2.1时,问题就消失了。

2 个答案:

答案 0 :(得分:-1)

您有一个名为main的目录。这不行。更改。

将其结构为$GOPATH/src/bitbucket.com/youruser name/yourpackagename/{main.go, otherthing.go, otherpackagedirectory}

“package main”不必位于它自己的子文件夹中:它继承了Bitbucket项目的名称(用户名/ myprojectname)。

答案 1 :(得分:-3)

您没有设置(或导出)GOPATH。 GOPATH比GOROOT重要得多(至少在newe Go版本中)。