通过查看相关问题,我无法找到解决方案。我不知道是什么让我的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时,问题就消失了。
答案 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版本中)。