x/tools/cmd/goimports:如果它位于模块内部,则不要为GOROOT中的包添加前缀

wztqucjr  于 5个月前  发布在  Go
关注(0)|答案(4)|浏览(45)

你正在使用的Go版本是什么( go version )?

go version go1.12beta2 darwin/amd64

这个问题在最新版本的发布中是否重现?

是的。

你正在使用什么操作系统和处理器架构( go env )?

GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/dottedmag/Library/Caches/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/dottedmag/go"
GOPROXY=""
GORACE=""
GOROOT="/Users/dottedmag/tectonic/_deps/go-1.12beta2"
GOTMPDIR=""
GOTOOLDIR="/Users/dottedmag/tectonic/_deps/go-1.12beta2/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/bw/6hyp_vyj68v973qbhlbcvlcr0000gn/T/go-build721712428=/tmp/go-build -gno-record-gcc-switches -fno-common"

你做了什么?

我在一个模块内有一个 GOROOT (每个仓库的Go安装,用于封闭构建)。我运行 goimports ,它试图解析一个包(比如, reflect ),它从 GOROOT 加载包,它们最终以当前模块内的路径为前缀。

你期望看到什么?

package mypkg

import "reflect"

type x reflect.Type

你看到了什么?

package mypkg

import "my.module/_deps/go-1.12beta2/src/reflect"

type x reflect.Type

如何修复

[补丁被@bcmills删除。请发送PR或CL,以便我们可以验证CLA合规性。]

polhcujo

polhcujo1#

是的,这是一个bug。我们不能在问题中接受补丁,但PR或CL是受欢迎的。参见https://golang.org/doc/contribute.html(一个测试也是好的)。

jgwigjjp

jgwigjjp2#

我想解决这个bug,如果还没有人处理的话。

uubf1zoe

uubf1zoe3#

绝对的。
我认为修复的理想位置是 internal/gopathwalk/walk.go ;在某个地方,它应该在遍历类型为 RootGOPATH 的根时跳过 $GOROOT。当前的 API,只有扁平的 Roots 列表,可能会让这变得尴尬。将 GOROOT 显式传递给 Walk 可能是有意义的。

eagi6jfj

eagi6jfj4#

我已经有一段时间没看到这个bug了。过时了吗?

相关问题