【发布时间】:2018-11-24 18:34:28
【问题描述】:
在带有 GoLand 2018.3 的 OSX Mojava 上使用 Go v1.11.1。当我在正常模式下(不是通过调试器)运行以下程序时,它工作正常。当我使用调试器运行它时,它会挂在scanner.Scan() 调用中。
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
fmt.Println("Hello")
fmt.Print("> ")
for scanner.Scan() {
input := scanner.Text()
fmt.Println(input)
fmt.Print("> ")
}
}
使用调试器单步执行,scanner.Scan() 似乎在读取输入时挂起。我在名为“zsyscall_darwin_amd64.go”的文件中找到了这一行:
r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
无论我在命令提示符下键入什么,它都不会返回。在非调试器配置中,它可以正常工作并打印回我输入的任何内容(按 Enter 后)。
【问题讨论】:
-
听起来很像 GoLand 并没有给你任何方法来控制程序的 STDIN。
-
这似乎是 GoLand 中的一个错误,正常运行完美。调试不起作用。