Функция fmt.Scan
Функция fmt.Scan используется для чтения данных из стандартного ввода (обычно с клавиатуры).
Она сканирует входной поток, разбивая его на поля, разделенные пробелами и переносами строк,
и сохраняет эти поля в переданные аргументы. Первым и последующим параметрами
функция принимает указатели на переменные, в которые будут записаны считанные значения.
Функция возвращает количество успешно считанных значений и ошибку, если она произошла.
Синтаксис
func Scan(a ...any) (n int, err error)
Аргументы передаются как указатели на переменные. Функция автоматически определяет тип переменной и преобразует входные данные в нужный формат.
Пример
Давайте считаем одно целое число с клавиатуры:
package main
import "fmt"
func main() {
var age int
fmt.Print("Enter your age: ")
res, err := fmt.Scan(&age)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Printf("Scanned %d value(s), age: %d\n", res, age)
}
Результат выполнения кода (ввод пользователя: 25):
Enter your age: 25
"Scanned 1 value(s), age: 25"
Пример
Считаем несколько значений разных типов за один вызов:
package main
import "fmt"
func main() {
var name string
var age int
var height float64
fmt.Print("Enter name, age and height: ")
res, err := fmt.Scan(&name, &age, &height)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Printf("Scanned %d value(s): name=%s, age=%d, height=%.2f\n",
res, name, age, height)
}
Результат выполнения кода (ввод пользователя: Alice 30 5.8):
Enter name, age and height: Alice 30 5.8
"Scanned 3 value(s): name=Alice, age=30, height=5.80"
Пример
Обработка ошибки при вводе данных неверного типа:
package main
import "fmt"
func main() {
var num int
fmt.Print("Enter a number: ")
res, err := fmt.Scan(&num)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Printf("Successfully scanned %d value(s): %d\n", res, num)
}
Результат выполнения кода (ввод пользователя: abc):
Enter a number: abc
"Error: expected integer"
Смотрите также
-
функцию
fmt.Scanln,
которая считывает данные до конца строки -
функцию
fmt.Scanf,
которая считывает данные по заданному формату -
функцию
fmt.Sscan,
которая считывает данные из строки, а не из стандартного ввода -
функцию
fmt.Print,
которая выводит данные в стандартный вывод