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...
и выберите приложение из списка. Это прикрепит отладчик к запущенному приложению.
Обратите внимание, что шаг компиляции необходим для улучшения процесса отладки, но вы не должны использовать полученный бинарный файл в производстве, так как (почти) все оптимизации были отключены.