Функция fmt.Sscan

Функция fmt.Sscan сканирует строку и извлекает из нее значения, разделенные пробелами. Первым параметром функция принимает строку для сканирования, а последующими параметрами - указатели на переменные, в которые будут записаны извлеченные значения. Функция возвращает количество успешно обработанных элементов и ошибку, если она произошла.

Синтаксис

gofmt.Sscan(str, &var1, &var2, ...)

Пример

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

gopackage main

import (
  "fmt"
)

func main() {
  var a, b int
  str := "123 456"
  res, err := fmt.Sscan(str, &a, &b)
  if err != nil {
    fmt.Println(err)
  }
  fmt.Println(res)
  fmt.Println(a, b)
}

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

go2
123 456

Пример

Извлечем из строки "hello world 42" строку, строку и число:

gopackage main

import (
  "fmt"
)

func main() {
  var s1, s2 string
  var num int
  str := "hello world 42"
  res, err := fmt.Sscan(str, &s1, &s2, &num)
  if err != nil {
    fmt.Println(err)
  }
  fmt.Println(res)
  fmt.Println(s1, s2, num)
}

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

go3
hello world 42

Пример

Если количество переменных не совпадает с количеством элементов в строке, функция вернет ошибку. Например, попробуем извлечь три числа из строки с двумя значениями:

gopackage main

import (
  "fmt"
)

func main() {
  var a, b, c int
  str := "10 20"
  res, err := fmt.Sscan(str, &a, &b, &c)
  if err != nil {
    fmt.Println("Error:", err)
  }
  fmt.Println("Count:", res)
}

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

go"Error: expected 3 fields, found 2"
Count: 2

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

  • функцию fmt.Scan,
    которая сканирует данные из стандартного ввода
  • функцию fmt.Scanln,
    которая сканирует данные до перевода строки
  • функцию fmt.Sprintf,
    которая форматирует строку без вывода
  • функцию fmt.Fscan,
    которая сканирует данные из io.Reader