Функция fmt.Fscan

Функция fmt.Fscan считывает данные из указанного источника ввода (например, из файла или строки) и сохраняет их в переданные переменные. В первый параметр функция принимает интерфейс io.Reader - источник данных, во второй и последующие параметры - указатели на переменные, в которые необходимо сохранить считанные значения. Функция возвращает количество успешно считанных элементов и ошибку.

Синтаксис

gofunc Fscan(r io.Reader, a ...any) (n int, err error)

Пример с чтением из строки

Давайте считаем из строки два целых числа и строку:

gopackage main

import (
  "fmt"
  "strings"
)

func main() {
  input := strings.NewReader("42 100 Golang")
  var a, b int
  var s string

  n, err := fmt.Fscan(input, &a, &b, &s)
  if err != nil {
    fmt.Println(err)
    return
  }

  fmt.Printf("Count: %d\n", n)
  fmt.Printf("a: %d, b: %d, s: %s\n", a, b, s)
}

Результат выполнения кода:

go"Count: 3"
"a: 42, b: 100, s: Golang"

Пример с чтением из файла

Создадим файл с данными и считаем из него значения:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  file, err := os.Open("data.txt")
  if err != nil {
    fmt.Println(err)
    return
  }
  defer file.Close()

  var name string
  var age int
  var score float64

  n, err := fmt.Fscan(file, &name, &age, &score)
  if err != nil {
    fmt.Println(err)
    return
  }

  fmt.Printf("Count: %d\n", n)
  fmt.Printf("Name: %s, Age: %d, Score: %.2f\n", name, age, score)
}

При условии, что в файле data.txt содержится строка "Alice 30 95.5", результат выполнения кода будет:

go"Count: 3"
"Name: Alice, Age: 30, Score: 95.50"

Пример с обработкой ошибок

Рассмотрим случай, когда данных недостаточно для заполнения переменных:

gopackage main

import (
  "fmt"
  "strings"
)

func main() {
  input := strings.NewReader("42")
  var a, b int

  n, err := fmt.Fscan(input, &a, &b)
  if err != nil {
    fmt.Println("Error:", err)
    fmt.Println("Read count:", n)
    return
  }

  fmt.Printf("a: %d, b: %d\n", a, b)
}

Результат выполнения кода:

go"Error: EOF"
"Read count: 1"

Смотрите также

  • функцию fmt.Fscanln,
    которая читает данные до конца строки
  • функцию fmt.Fscanf,
    которая читает данные по заданному формату
  • функцию fmt.Sscan,
    которая читает данные из строки
  • функцию fmt.Scan,
    которая читает данные из стандартного ввода