У каждого процесса есть свой стандартный ввод, вывод и дескриптор файла ошибок. stdin
выступает в роли процесса ввода данных. Данная инструкция описывает, как читать данные из stdin
.
Как читать ввод с клавиатуры в командной строке в Golang?
1. Создайте файл fmt.go
со следующим содержимым:
Рекомендуем вам супер TELEGRAM канал по Golang где собраны все материалы для качественного изучения языка. Удивите всех своими знаниями на собеседовании! 😎
Мы публикуем в паблике ВК и Telegram качественные обучающие материалы для быстрого изучения Go. Подпишитесь на нас в ВК и в Telegram. Поддержите сообщество Go программистов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
package main import ( "fmt" ) func main() { var name string fmt.Println("Как тебя зовут?") fmt.Scanf("%s\n", &name) var age int fmt.Println("Сколько тебе лет?") fmt.Scanf("%d\n", &age) fmt.Printf("Привет, %s, твой возраст - %d\n", name, age) } |
2. Выполните код через go run fmt.go
;
3. Введите имя Джон и нажмите Enter;
4. Введите возраст 40 и нажмите Enter;
5. Посмотрите на финальный результат:
1 2 3 4 5 |
Как тебя зовут? Джон Сколько тебе лет? 40 Привет, Джон, твой возраст - 40 |
6. Создайте файл scanner.go
со следующим содержимым:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
package main import ( "bufio" "fmt" "os" ) func main() { // Scanner может просканировать построчный ввод sc := bufio.NewScanner(os.Stdin) for sc.Scan() { txt := sc.Text() fmt.Printf("Эхо: %s\n", txt) } } |
7. Выполните код через go run scanner.go
;
8. Введите слово Привет и нажмите Enter;
9. Нажмите CTRL + C для отправки SIGINT
;
10. Посмотрите на результат:
1 2 |
Привет Эхо: Привет |
11. Создайте файл reader.go
со следующим содержимым:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
package main import ( "fmt" "os" ) func main() { for { data := make([]byte, 8) n, err := os.Stdin.Read(data) if err == nil && n > 0 { process(data) } else { break } } } func process(data []byte) { fmt.Printf("Получено: %X %s\n", data, string(data)) } |
12. Выполните код через конвейерный ввод echo 'Go is awesome!' | go run reader.go
;
13. Посмотрите на вывод:
1 2 3 |
echo 'Go is awesome!' | go run reader.go Получено: 6F20697320617765 Go is aw Получено: 736F6D652127207C esome! |
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
является последним представленным подходом. Он предоставляет вам больше контроля над тем, как читать ввод и как его сохранять.
Администрирую данный сайт с целью распространения как можно большего объема обучающего материала для языка программирования Go. В IT с 2008 года, с тех пор изучаю и применяю интересующие меня технологии. Проявляю огромный интерес к машинному обучению и анализу данных.
E-mail: vasile.buldumac@ati.utm.md
Образование
Технический Университет Молдовы (utm.md), Факультет Вычислительной Техники, Информатики и Микроэлектроники
- 2014 — 2018 Universitatea Tehnică a Moldovei, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
- 2018 — 2020 Universitatea Tehnică a Moldovei, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»
Отличный урок!