cmd/go: some errors not reported with go list

rm5edbpk  于 2个月前  发布在  Go
关注(0)|答案(9)|浏览(32)

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

提示(go1.21-4d9beb2052)

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

是的

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

darwin/amd64

你做了什么?

有一个包含两个包 ab 的模块。 b 是主包。 a 错误地导入了 b
go.mod

module m

go 1.21

a/a.go

package a

import _ "m/b"

b/b.go

package main

func main() {}

运行 go list ./a ./b

你期望看到什么?

报告导入不可导入的包的错误,例如

a/a.go:3:8: import "m/b" is a program, not an importable package
m/a
m/b

你看到了什么?

没有错误,退出代码为0。

$ go list ./a ./b
m/a
m/b
$ echo $?
0

有趣的是, go list -test ./a ./b 报告了错误,尽管与测试文件无关(实际上没有测试文件)。文档似乎没有提到 -test 标志可以导致错误报告的不同行为。
还有一些其他错误在使用 go list 时没有被报告,但在使用 go list -test 时被报告。 https://cs.opensource.google/go/go/+/master:src/cmd/go/testdata/script/vendor_import.txt 是其中一个例子。 bad.goinvalid.go 包含了一些错误,但 go list 命令成功执行。
看起来不同的行为与指定 -test 时运行的这段代码 https://cs.opensource.google/go/go/+/master:src/cmd/go/internal/list/list.go;l=736-788 有关。
在处理 CL https://golang.org/cl/474236 时发现的。

g9icjywg

g9icjywg1#

https://go.dev/cl/477838提到了这个问题:cmd/go: permit "go list" error in some tests

t98cgbkg

t98cgbkg2#

在CL https://golang.org/cl/474236之后,当列出多个软件包时,默认的-pgo=auto模式将导致此代码https://cs.opensource.google/go/go/+/master:src/cmd/go/internal/list/list.go;l=736-788运行,从而导致它报告错误。go list -pgo=off ./a ./b将恢复到之前的(Go 1.20)意外行为。

xcitsw88

xcitsw883#

我认为允许主包的空白导入是一种跟踪依赖关系的方法,例如在使用tools.go模式时。

ccgok5k5

ccgok5k54#

@seankhliao,go mod tidy允许它们这样做,但通常情况下,我们期望go list在报告错误方面遵循go build的规则,而go build当然不会允许你显式地导入一个package main

czq61nw1

czq61nw15#

我通过另一个向量实现了这个功能,但类似。当我一开始就允许设置这个结构时,声称我不能列出它似乎很奇怪。这是一个破坏性的变化 - 它真的值得吗?

vnzz0bqm

vnzz0bqm6#

@thockin,鉴于我们不了解为什么最初会出现不同的行为,我们无法轻松地恢复这种错误的行为。
go list 支持 -e 标志以允许列出可能存在错误的软件包。如果 -e 标志不允许 go list 在此错误之后继续进行,请提交一个单独的问题。(go list -e 已经有很多错误,但我们一直在慢慢修复这些错误,希望我们能继续将其朝着更好的长期状态发展。)

zbsbpyhn

zbsbpyhn7#

我们在尝试使用go1.21rc2测试kubernetes时也遇到了这个问题:kubernetes/kubernetes#118996
-e的解决方法似乎有效(kubernetes/kubernetes#119027),但我不确定从长远来看采用这种方法是否明智。

67up9zun

67up9zun8#

你好。
我报告的另一个问题#62228已经被关闭为重复。但是在那里我提供了复现者,我认为它是由这个提交引起的:a5c7928
或者这实际上是一个单独的问题,而不是这个问题的重复吗?

cngwdvgl

cngwdvgl9#

@alexbozhenko,感谢你标记那个提交。这是一个有趣的线索,尽管它仍然不能真正解释为什么PGO更改似乎触发了这种行为。😅
但是我认为这将帮助我们进行调查。

相关问题