英文:
Go 1.5 to 1.6: import cycle not allowed
问题
我正在尝试从Go 1.5.3迁移到Go 1.6,但在构建某些包时遇到了“不允许循环导入”错误。
例如,构建golint工具时,我遇到了以下错误:
不允许循环导入
包github.com/golang/lint/golint导入了flag
导入了errors
导入了runtime
导入了runtime/internal/atomic
这是我的本地环境有问题还是有办法修复这个问题?
go env
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/radek/Projekty/Go"
GORACE=""
GOROOT="/home/radek/Software/Go/go1.6"
GOTOOLDIR="/home/radek/Software/Go/go1.6/pkg/tool/linux_amd64"
GO15VENDOREXPERIMENT=""
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
CXX="g++"
CGO_ENABLED="1"
英文:
I'm trying to migrate from Go 1.5.3 to Go 1.6 and for some packages I encounter "import cycle not allowed" error, when I'm trying to build them for 1.6 .
e.g for building the golint tool I'm getting:
import cycle not allowed
package github.com/golang/lint/golint
imports flag
imports errors
imports runtime
imports runtime/internal/atomic
imports runtime
Is there eny problem in my local env or is there any way how to fix this?
go env
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/radek/Projekty/Go"
GORACE=""
GOROOT="/home/radek/Software/Go/go1.6"
GOTOOLDIR="/home/radek/Software/Go/go1.6/pkg/tool/linux_amd64"
GO15VENDOREXPERIMENT=""
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
CXX="g++"
CGO_ENABLED="1"
答案1
得分: 5
我最近遇到了这个问题。这可能与我的环境变量设置错误有关。
运行 go version
命令,检查你是否使用了正确的 Go 发行版进行构建。
如果版本不是你期望的版本,请确保将 $GOROOT
和/或 $GOPATH
变量更新为正确的设置。
https://golang.org/doc/install
英文:
I had this happen to me the other day. It had something to do with my environment variables being setup wrong.
do go version
and check that you are building with the expected go distribution.
If it's not the version you were expecting, make sure you update your $GOROOT
and or $GOPATH
variables to the correct settings.
答案2
得分: 1
这个错误是在有一个包自己导入自己时显示的。例如,在$GOPATH/src/github.com/myawesome/mistakes
目录下,你有一个文件像这样:
package mistakes
import (
"github.com/myawesome/mistakes"
)
func CreateComplicatedBugFromSimpleMistake(m mistakes.Mistake) {
// done.
}
这就是我正在做的。如果你也遇到了这个问题,你应该知道如何解决它。
英文:
This error is what is shown when there is a package importing itself. For example, in $GOPATH/src/github.com/myawesome/mistakes
, you have a file that like this:
package mistakes
import (
"github.com/myawesome/mistakes"
)
func CreateComplicatedBugFromSimpleMistake(m mistakes.Mistake) {
// done.
}
That was what I was doing. You should know how to solve it, if this is your case too.
答案3
得分: 0
比较 readlink -f $(which go)
和 echo $GOROOT
的输出,如果它们不同,你应该设置 $GOROOT 指向你正在运行的 go 二进制文件的根目录,或者反之亦然。
英文:
Compare the output of readlink -f $(which go)
and echo $GOROOT
and if they are different, you should set $GOROOT to point to the root directory of the go binary you are running or vice versa.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论