x/tools/gopls: 在Kubernetes中切换标签时无效的错误消息

x3naxklr  于 4个月前  发布在  Go
关注(0)|答案(3)|浏览(41)

你正在使用哪个版本的Go( go version )?

$ go version
1.15.5
gopls :  0.5.5 
gopls flags: -rpc.trace

这个问题在最新版本中是否会重现?

  1. 打开git标签为1.18.6的kubernets文件夹,等待gopls服务器完成。
  2. 切换到1.19.0版本,此时gopls服务器无法获取函数文档,因此回退到使用getdoc。
  3. 执行"go:重启语言服务器",没有响应并重试。
  4. 等待一段时间,vscode go扩展报告 The language server is not able to serve any features. Initialization failed: Error: Connection got disposed..

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

go env 输出

$ go env
set GO111MODULE=on
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\xiaoqing\AppData\Local\go-build
set GOENV=C:\Users\xiaoqing\AppData\Roaming\go\env  
set GOEXE=.exe
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=D:\go\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=D:\go
set GOPRIVATE=
set GOPROXY=https://goproxy.cn,direct
set GOROOT=C:\Program Files\Go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLDIR=C:\Program Files\Go\pkg\tool\windows_amd64
set GCCGO=gccgo
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=D:\git\kubernetes\go.mod
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=C:\Users\xiaoqing\AppData\Local\Temp\go-build065131578=/tmp/go-build -gno-record-gcc-switches

你做了什么?

在任务管理器中找到很多go.exe进程。

你期望看到什么?

切换到新分支应该重启gopls服务器。

你看到了什么?

gopls停止工作,点击"go:重启语言服务器"后悬停文本不显示任何内容。我可以通过重新加载窗口来解决这个问题。gopls服务器日志如下:
gopls-stop-work-on-checkout-new-branch.txt
vscode设置:
工作区设置:

{
    //"go.buildTags": "linux",
    "go.toolsEnvVars": {
    "GOFLAGS": "-tags=linux -mod=mod"
    },
}

用户设置:

{
    "files.eol": "\n",
    "go.useCodeSnippetsOnFunctionSuggest": true,
    "editor.renderWhitespace": "all",
    "editor.renderControlCharacters": true,
    "files.autoSave": "afterDelay",
    "editor.wordWrap": "on",
    "go.toolsEnvVars": {
    
    //    "GOFLAGS": "-tags=linux"
    },
    "go.languageServerFlags": [
        "-rpc.trace",
    ],
    "go.languageServerExperimentalFeatures": {

        "diagnostics": true,
        "documentLink": true
    },
    "workbench.settings.openDefaultSettings": true,
    "editor.minimap.enabled": false,
    "go.formatTool": "goimports",
    "go.useLanguageServer": true,
}
bq9c1y66

bq9c1y661#

我无法复现这个问题,尽管在切换标签时,我确实看到了无效的错误信息。
/cc @hyangah - 这里是否有可能存在一个bug,即在手动重启崩溃后的Go扩展程序后,语言服务器似乎会崩溃?

fdx2calv

fdx2calv2#

我明白了:

  1. gopls在这里挂起,甚至关闭响应也没有及时回答。
[Trace - 20:53:24.387 PM] Sending request 'shutdown - (35)'.
Params: 
...

[Trace - 21:07:06.546 PM] Received response 'shutdown - (35)' in 822159ms.
Result: null
...
  1. 当gopls最终响应关闭请求时,扩展程序试图重新建立连接,但看起来连接没有正常清理(gopls进程仍在运行?),并且语言客户端库无法重启。
[Error - 下午9:07:06] Starting client failed
Error: Connection is already listening
	at throwIfListening (c:\Users\xiaoqing\.vscode\extensions\golang.go-0.19.0\dist\goMain.js:94014:19)
	at Object.listen (c:\Users\xiaoqing\.vscode\extensions\golang.go-0.19.0\dist\goMain.js:94344:13)
	at Object.listen (c:\Users\xiaoqing\.vscode\extensions\golang.go-0.19.0\dist\goMain.js:10479:34)
	at c:\Users\xiaoqing\.vscode\extensions\golang.go-0.19.0\dist\goMain.js:12535:24
[Error - 下午9:07:06] Starting client failed
Error: Connection is already listening
	at throwIfListening (c:\Users\xiaoqing\.vscode\extensions\golang.go-0.19.0\dist\goMain.js:94014:19)
	at Object.listen (c:\Users\xiaoqing\.vscode\extensions\golang.go-0.19.0\dist\goMain.js:94344:13)
	at Object.listen (c:\Users\xiaoqing\.vscode\extensions\golang.go-0.19.0\dist\goMain.js:10479:34)
	at c:\Users\xiaoqing\.vscode\extensions\golang.go-0.19.0\dist\goMain.js:12535:24

我会询问语言客户端库的开发人员关于第二个问题 - 为什么清理不完整。我们可以尝试使用一个完全干净的语言客户端重新启动。但是,如果这表明之前的挂起的gopls仍然存在,那也不是理想的情况。

qyzbxkaa

qyzbxkaa3#

https://golang.org/cl/284937提到了这个问题:internal/lsp: don't show context cancellation in the progress bar

相关问题