为啥 emacs-lsp go-mode 在路径中找不到 go 可执行文件?

Posted

技术标签:

【中文标题】为啥 emacs-lsp go-mode 在路径中找不到 go 可执行文件?【英文标题】:Why can't emacs-lsp go-mode not find go executable in path?为什么 emacs-lsp go-mode 在路径中找不到 go 可执行文件? 【发布时间】:2020-04-25 14:26:00 【问题描述】:

在 emacs 中,使用 gopls 但在我的路径上找不到 go。但它就在那里,我可以运行它。与社区联系,看看我是否遗漏了什么。我可以毫无问题地运行基本的 gin 服务器。

使用来自文档的 config。

输出:

panic: err: exec: "go": executable file not found in $PATH: stderr: 

goroutine 73 [running]:
golang.org/x/tools/internal/lsp/debug.PrintVersionInfo.func2()
    /Users/seanh/go/pkg/mod/golang.org/x/tools@v0.0.0-20200407041343-bf15fae40dea/internal/lsp/debug/info.go:58 +0x1c3
golang.org/x/tools/internal/lsp/debug.section(0x1a2d520, 0xc00013de60, 0x0, 0x18cda9a, 0x7, 0xc0003bb588)
    /Users/seanh/go/pkg/mod/golang.org/x/tools@v0.0.0-20200407041343-bf15fae40dea/internal/lsp/debug/info.go:69 +0x319
golang.org/x/tools/internal/lsp/debug.PrintVersionInfo(0x1a40560, 0xc000226c60, 0x1a2d520, 0xc00013de60, 0x1, 0x0)
    /Users/seanh/go/pkg/mod/golang.org/x/tools@v0.0.0-20200407041343-bf15fae40dea/internal/lsp/debug/info.go:52 +0x1a7
golang.org/x/tools/internal/lsp.(*Server).initialized(0xc000230080, 0x1a40560, 0xc000226c60, 0x1fa2ef0, 0x0, 0x0)
    /Users/seanh/go/pkg/mod/golang.org/x/tools@v0.0.0-20200407041343-bf15fae40dea/internal/lsp/general.go:163 +0x1a3
golang.org/x/tools/internal/lsp.(*Server).Initialized(0xc000230080, 0x1a40560, 0xc000226c60, 0x1fa2ef0, 0x1fa2ef0, 0x0)
    /Users/seanh/go/pkg/mod/golang.org/x/tools@v0.0.0-20200407041343-bf15fae40dea/internal/lsp/server_gen.go:112 +0x49
golang.org/x/tools/internal/lsp/protocol.ServerHandler.func1(0x1a40560, 0xc000226c60, 0xc00022cd80, 0x1c650b5, 0x1f77a40)
    /Users/seanh/go/pkg/mod/golang.org/x/tools@v0.0.0-20200407041343-bf15fae40dea/internal/lsp/protocol/tsserver.go:97 +0x757
golang.org/x/tools/internal/lsp/lsprpc.handshaker.func1(0x1a40560, 0xc000226c60, 0xc00022cd80, 0x0, 0x0)
    /Users/seanh/go/pkg/mod/golang.org/x/tools@v0.0.0-20200407041343-bf15fae40dea/internal/lsp/lsprpc/lsprpc.go:531 +0x505
golang.org/x/tools/internal/jsonrpc2.MustReply.func1(0x1a40560, 0xc000226c60, 0xc00022cd80, 0x1007aaf, 0xc0002901d8)
    /Users/seanh/go/pkg/mod/golang.org/x/tools@v0.0.0-20200407041343-bf15fae40dea/internal/jsonrpc2/handler.go:54 +0x47
golang.org/x/tools/internal/jsonrpc2.AsyncHandler.func1.2(0xc00009eb40, 0xc000226de0, 0xc000232130, 0x1a40560, 0xc000226c60, 0xc00022cd80)
    /Users/seanh/go/pkg/mod/golang.org/x/tools@v0.0.0-20200407041343-bf15fae40dea/internal/jsonrpc2/handler.go:110 +0x6c
created by golang.org/x/tools/internal/jsonrpc2.AsyncHandler.func1
    /Users/seanh/go/pkg/mod/golang.org/x/tools@v0.0.0-20200407041343-bf15fae40dea/internal/jsonrpc2/handler.go:107 +0x187

Process gopls stderr finished

【问题讨论】:

【参考方案1】:

猜测:与您正在运行的任何其他 shell 相比,Emacs 中的 PATH env var 可能有所不同。你可以在 Emacs 中用(getenv "PATH") 检查,你可以用

(setenv "PATH" (concat (getenv "PATH") ":/path/to/go"))

此外,如果您从可以找到 gopls 的同一 shell 启动 Emacs,则 Emacs 应该具有相同的 PATH var,并且一切正常。

至于为什么PATHs 不同,这与你如何启动 Emacs 和你的 shell 有关。

【讨论】:

以上是关于为啥 emacs-lsp go-mode 在路径中找不到 go 可执行文件?的主要内容,如果未能解决你的问题,请参考以下文章

通过配置emacs的go-mode感性认识一下配置文档

搭建emacs的go编程语言环境

为啥图像路径中的图像不显示在 UIImageView 中?

为啥 .NET 会在路径中已经存在的斜杠上添加一个额外的斜杠?

为啥绝对路径在我的项目中不起作用?

为啥在 NuxtJS 中作为 prop 传递时,图像路径没有被 require() 解析?