goland - GoLang 调试器在标准输入上阻塞
问题描述
我在使用 GoLand 的调试器来尝试从stdin
. 例如,下面的代码:
package main
import (
"io"
"os"
"strings"
)
func main() {
io.Copy(os.Stdout, strings.NewReader("Start typing now...\n"))
io.Copy(os.Stdout, os.Stdin)
}
当我run
在 GoLand 中执行它时完美执行 - 控制台窗口正确收集输入。但是当我使用debug
命令时 - 我可以看到我的输入出现在控制台窗口中,但是回车键不会结束输入字符串,而是光标只是移动到下一行。
我的版本:
GoLand 2018.2.2
Build #GO-182.4129.57, built on August 23, 2018
JRE: 1.8.0_152-release-1248-b8 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
macOS 10.13.6
解决方案
当您使用 OSX 时,没有简单的方法可以使其正常工作。
假设您使用的是 Go 1.10 或更高版本,请将目录更改为$GOPATH/src/github.com/user/package
,然后使用 编译您的应用程序go build -gcflags "all=-N -l" github.com/user/package
,然后在终端中手动启动应用程序。应用程序运行后,转到Run | Attach to Process...
并从列表中选择应用程序。这会将调试器附加到正在运行的应用程序。
请注意,需要编译步骤以改善调试体验,但您不应在生产中使用生成的二进制文件,因为(几乎)所有优化都已关闭。
推荐阅读
- python - 在python中,如何使用精度作为考虑类的标准来离散化连续变量
- jquery - jquery计算p标签中的字符并添加类
- c++ - 未设置默认成员初始值设定项 C++
- scripting - 使用基于文件名的图像填充 doc
- sql - 获取字符串的子字符串
- javascript - 如何将预定义的 const 添加为对象属性
- css - (S)CSS z-index 具有绝对定位父元素的伪元素
- c# - Linq Query连接两个表获得重复值
- typescript - 为一个对象设置一个类型,但从它的值推断它的实际类型
- php - 无法验证来自 Sendgrid 事件 webhook 的签名