У каждого процесса есть свой стандартный ввод, вывод и дескриптор файла ошибок. stdin выступает в роли процесса ввода данных. Данная инструкция описывает, как читать данные из stdin.

Как читать ввод с клавиатуры в командной строке в Golang?

1. Создайте файл fmt.go со следующим содержимым:

Форум Гоферов

Мы работаем над форумом для программистов на Golang. Очень нужны модераторы которые хотят помочь с ответами для новичков и помочь в развитии Go-сообщества.

Go на Форум

Уроки, статьи и Видео

Мы публикуем в паблике ВК и Telegram качественные обучающие материалы для быстрого изучения Go. Подпишитесь на нас в ВК и в Telegram. Поддержите сообщество Go программистов.

Go в ВК Go в Telegram

2. Выполните код через go run fmt.go;
3. Введите имя Джон и нажмите Enter;
4. Введите возраст 40 и нажмите Enter;
5. Посмотрите на финальный результат:

6. Создайте файл scanner.go со следующим содержимым:

7. Выполните код через go run scanner.go;
8. Введите слово Привет и нажмите Enter;
9. Нажмите CTRL + C для отправки SIGINT;
10. Посмотрите на результат:

11. Создайте файл reader.go со следующим содержимым:

12. Выполните код через конвейерный ввод echo 'Go is awesome!' | go run reader.go;
13. Посмотрите на вывод:

stdin в Go можно получить через Stdin из пакета os. По факту, это тип File, что имплементирует интерфейс Reader. Чтение из Reader очень простое. Предыдущий код показывает три самых частых случая того, как читать из Stdin.

Первая опция показывает, как использовать пакет fmt, что предоставляет функции Scan, Scanf и Scanln. Функция Scanf читает ввод и сохраняет его в переменную (или переменные). Преимущество Scanf в том, что вы можете определить формат сканируемого значения. Функция Scan только читает ввод и сохраняет его в переменную (без предварительного форматирования), а Scanln, как можно понять по названию, читает ввод, что заканчивается обрыванием строки \n.

Scanner, из второго примера, предоставляет удобный способ для сканирования более крупного ввода. Scanner содержит функцию Split, через которую можно определить настраиваемую функцию разделения строки. К примеру, для сканирования слов из stdin вы можете использовать bufio.ScanWords и предварительно определенный SplitFunc.

Чтение через API Reader является последним представленным подходом. Он предоставляет вам больше контроля над тем, как читать ввод и как его сохранять.