Reputation: 339
When debugging with Goland on macos, my program waits for input from stdin.
I can type in the console and press enter, but the input is not passed to my program.
It is just like typing in a text editor. I can type, press enter, delete everything I just did. My program gets none of this passed to it.
I also get this behavior when debugging with dlv from the console, however, I have found discussion on how to address it in that circumstance:
https://github.com/go-delve/delve/issues/1274#issuecomment-406969034
I see a similar fix for vscode as well:
https://github.com/Microsoft/vscode-go/issues/219#issuecomment-192164367
But I could not find a solution for goland.
Upvotes: 0
Views: 1354
Reputation: 412
You can workaround by adding a STDIN env variable to your main
routine before reading input via fmt.Scanf()
if stdin := os.Getenv("STDIN"); len(stdin) != 0 {
stdinFile, err := os.Open(stdin)
if err != nil {
panic(err)
}
os.Stdin = stdinFile
}
Upvotes: 0
Reputation: 7477
This is a known issue, see the official issue tracker report for this.
The workaround for it is to compile the application with the correct debugging flags, -gcflags="all=-N -l" for Go 1.10 or newer and
-gcflags="-N -l" for Go 1.9 or older), launch the application in an OS terminal and then use the Attach to process...
feature. You can also see the linked issue to see other possible workarounds.
Upvotes: 4