你正在使用的Go版本是什么( go version
)?
$ go version
go version devel +8e0be05ec7 Sun Jan 19 14:04:09 2020 +0000 linux/amd64
$ go list -m golang.org/x/tools
golang.org/x/tools v0.0.0-20200121200311-d456b1cd8c86
$ go list -m golang.org/x/tools/gopls
golang.org/x/tools/gopls v0.1.8-0.20200121200311-d456b1cd8c86
这个问题在最新版本中是否会重现?
是的
你正在使用什么操作系统和处理器架构( go env
)?
go env
输出
$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/myitcv/.cache/go-build"
GOENV="/home/myitcv/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/myitcv/gostuff"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/home/myitcv/gos"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/home/myitcv/gos/pkg/tool/linux_amd64"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/home/myitcv/.vim/plugged/govim/go.mod"
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 -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build878422207=/tmp/go-build -gno-record-gcc-switches"
你做了什么?
对于以下文件的诊断信息有误导性:
package main
func main() {
_ = func(format string, args ...interface) error {
return nil
}
}
我们得到的是:
PublishDiagnostics callback: &protocol.PublishDiagnosticsParams{
URI: "file:///home/myitcv/gostuff/src/github.com/myitcv/playground/main.go",
Version: 36,
Diagnostics: {
{
Range: protocol.Range{
Start: protocol.Position{Line:3, Character:5},
End: protocol.Position{Line:3, Character:5},
},
Severity: 1,
Code: nil,
Source: "syntax",
Message: "expected expression",
Tags: nil,
RelatedInformation: nil,
},
},
}
与编译器给出的信息进行对比:
./main.go:4:43: syntax error: unexpected ), expecting {
./main.go:5:3: syntax error: unexpected return, expecting comma or )
./main.go:7:1: syntax error: non-declaration statement outside function body
你期望看到什么?
更好的诊断信息。
你实际看到了什么?
如上所述
标记为 gopls/v1.0.0
,因为这对 v0.3.0
不是关键问题。
cc @stamblerre
FYI @leitzler
4条答案
按热度按时间2w3kk1z51#
这将来自
go/parser
或其他地方,对吗?我认为gopls无法对此做任何改进。vsaztqbk2#
是的,这个错误来自go/parser。一个最小的复现可以在此处找到:https://play.golang.org/p/ca24wvyr5Wl 。这似乎是一个示例,其中go/parser的错误应该更新以匹配编译器的错误。我将更改问题标题以反映这一点。
eqzww0vc3#
/cc @griesemer
nr9pn0ug4#
https://golang.org/cl/259817提到了这个问题:
go/parser: Improve error message to user when interface parsing fails