Функция fmt.Sscanf

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

Синтаксис

gofmt.Sscanf(str, format, a...)

Пример ⁅n="sect"⁆

Давайте извлечем из строки "John 25 1.75" значения разных типов:

gopackage main

import (
  "fmt"
)

func main() {
  str := "John 25 1.75"
  var name string
  var age int
  var height float64

  n, err := fmt.Sscanf(str, "%s %d %f", &name, &age, &height)
  if err != nil {
    fmt.Println(err)
    return
  }

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

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

go"Name: John, Age: 25, Height: 1.75, Count: 3"

Пример ⁅n="sect"⁆

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

gopackage main

import (
  "fmt"
)

func main() {
  str := "Product: laptop, Price: 999.99"
  var price float64

  n, err := fmt.Sscanf(str, "Product: %s, Price: %f", new(string), &price)
  if err != nil {
    fmt.Println(err)
    return
  }

  fmt.Printf("Price: %.2f, Items parsed: %d", price, n)
}

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

go"Price: 999.99, Items parsed: 2"

Пример ⁅n="sect"⁆

Давайте извлечем дату из строки в формате "2026-09-04":

gopackage main

import (
  "fmt"
)

func main() {
  str := "2026-09-04"
  var year, month, day int

  n, err := fmt.Sscanf(str, "%d-%d-%d", &year, &month, &day)
  if err != nil {
    fmt.Println(err)
    return
  }

  fmt.Printf("Year: %d, Month: %d, Day: %d, Parsed: %d", year, month, day, n)
}

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

go"Year: 2026, Month: 9, Day: 4, Parsed: 3"

Пример ⁅n="sect"⁆

Давайте обработаем случай, когда формат не соответствует строке:

gopackage main

import (
  "fmt"
)

func main() {
  str := "abc 123"
  var num int

  n, err := fmt.Sscanf(str, "%d", &num)
  if err != nil {
    fmt.Printf("Error: %v, Items parsed: %d", err, n)
    return
  }

  fmt.Printf("Number: %d", num)
}

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

go"Error: expected integer, Items parsed: 0"

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

  • функцию fmt.Scan,
    которая сканирует данные из стандартного ввода
  • функцию fmt.Sprintf,
    которая форматирует строку без вывода
  • функцию fmt.Sscan,
    которая сканирует строку без форматирования
  • функцию fmt.Sscanln,
    которая сканирует строку до новой строки