user40176
user40176

Reputation: 339

Goland doesn't accept stdin while debugging

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

Answers (2)

Anthony Metzidis
Anthony Metzidis

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

dlsniper
dlsniper

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

Related Questions