登录
首页 >  Golang >  Go问答

Goland 调试功能不支持标准输入

来源:stackoverflow

时间:2024-03-26 19:09:34 278浏览 收藏

在 macOS 上使用 Goland 调试程序时,当程序等待标准输入 (stdin) 时,输入不会传递给程序,该行为类似于在文本编辑器中输入。使用 dlv 从控制台调试时也会遇到此问题。虽然 vscode 存在解决方法,但目前 Goland 没有官方解决方案。

问题内容

在 macos 上使用 Goland 进行调试时,我的程序等待来自 stdin 的输入。

我可以在控制台中输入并按 Enter 键,但输入不会传递到我的程序。

这就像在文本编辑器中输入一样。我可以输入、按回车键、删除我刚才所做的一切。我的程序没有将这些传递给它。

在从控制台使用 dlv 进行调试时,我也会遇到此行为,但是,我发现了有关如何在这种情况下解决该问题的讨论:

https://github.com/go-delve/delve/issues/1274#issuecomment-406969034

我也看到了 vscode 的类似修复:

https://github.com/Microsoft/vscode-go/issues/219#issuecomment-192164367

但是我找不到goland的解决方案。


解决方案


这是一个已知问题,请参阅官方issue tracker report

解决方法是使用正确的调试标志编译应用程序,-gcflags="all=-n -l" 对于 go 1.10 或更高版本, -gcflags="-n -l" 对于 go 1.9 或更早版本),在操作系统终端中启动应用程序,然后使用 attach 处理... 功能。您还可以查看链接的问题以查看其他可能的解决方法。

您可以通过在通过 fmt.scanf() 读取输入之前将 stdin 环境变量添加到 main 例程来解决此问题

if stdin := os.Getenv("STDIN"); len(stdin) != 0 {
        stdinFile, err := os.Open(stdin)
        if err != nil {
            panic(err)
        }
        os.Stdin = stdinFile

    }

以上就是《Goland 调试功能不支持标准输入》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>