Переменная os.Stdin
Переменная os.Stdin представляет собой стандартный поток ввода (stdin) в операционной системе. Она является файловым дескриптором типа os.File и позволяет программе читать данные, поступающие из стандартного ввода. Это может быть ввод с клавиатуры, данные из конвейера или содержимое перенаправленного файла. Использование os.Stdin является основным способом взаимодействия с пользователем через командную строку в Go-программах.
Синтаксис
os.Stdin.Read([]byte) (int, error)
Переменная os.Stdin предоставляет методы для чтения данных. Основной метод - Read, который принимает байтовый срез и возвращает количество прочитанных байтов и ошибку. Также доступны методы ReadAt, Seek, Stat и другие, поскольку os.Stdin является файловым дескриптором.
Пример
Давайте прочитаем строку из стандартного ввода с помощью метода Read:
package main
import (
"fmt"
"os"
)
func main() {
data := make([]byte, 1024)
n, err := os.Stdin.Read(data)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Printf("Read %d bytes: %s", n, string(data[:n]))
}
Результат выполнения кода при вводе "hello":
"Read 6 bytes: hello"
Пример
Для построчного чтения удобно использовать сканер из пакета bufio вместе с os.Stdin:
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
fmt.Print("Enter text: ")
scanner.Scan()
text := scanner.Text()
if err := scanner.Err(); err != nil {
fmt.Println("Error:", err)
return
}
fmt.Printf("You entered: %s", text)
}
Результат выполнения кода при вводе "Hello Go":
"Enter text: Hello Go"
"You entered: Hello Go"
Пример
Давайте прочитаем несколько строк из стандартного ввода, пока не встретим пустую строку:
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
fmt.Println("Enter lines (empty line to stop):")
for scanner.Scan() {
line := scanner.Text()
if line == "" {
break
}
fmt.Printf("Line: %s\n", line)
}
if err := scanner.Err(); err != nil {
fmt.Println("Error:", err)
}
}
Результат выполнения кода при вводе строк "first", "second" и пустой строки:
"Enter lines (empty line to stop):"
"Line: first"
"Line: second"
Смотрите также
-
переменную
os.Stdout,
которая представляет стандартный поток вывода -
переменную
os.Stderr,
которая представляет стандартный поток ошибок -
функцию
os.Open,
которая открывает файл для чтения -
функцию
os.ReadFile,
которая читает содержимое файла целиком