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

1 ответ

Поскольку вы используете OSX, не существует простого способа заставить это работать.

Предполагая, что вы используете Go 1.10 или новее, измените каталог на $GOPATH/src/github.com/user/package, а затем скомпилируйте ваше приложение, используя go build -gcflags "all=-N -l" github.com/user/package, а затем вручную запустите приложение в Терминале вручную. После запуска приложения перейдите в Run | Attach to Process... и выберите приложение из списка. Это прикрепит отладчик к запущенному приложению.

Обратите внимание, что шаг компиляции необходим для улучшения процесса отладки, но вы не должны использовать полученный бинарный файл в производстве, так как (почти) все оптимизации были отключены.

Другие вопросы по тегам