Функция fmt.Sscanf
Функция fmt.Sscanf сканирует строку и извлекает из нее значения
в соответствии с заданным форматом. Она возвращает количество
успешно обработанных элементов и ошибку, если она возникла.
Первым параметром функция принимает строку для сканирования,
вторым - строку формата, третьим и последующими - указатели на
переменные, в которые будут сохранены извлеченные значения.
Синтаксис
fmt.Sscanf(str, format, a...)
Пример ⁅n="sect"⁆
Давайте извлечем из строки "John 25 1.75" значения
разных типов:
package 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)
}
Результат выполнения кода:
"Name: John, Age: 25, Height: 1.75, Count: 3"
Пример ⁅n="sect"⁆
Давайте извлечем только часть данных из строки:
package 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)
}
Результат выполнения кода:
"Price: 999.99, Items parsed: 2"
Пример ⁅n="sect"⁆
Давайте извлечем дату из строки в формате "2026-09-04":
package 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)
}
Результат выполнения кода:
"Year: 2026, Month: 9, Day: 4, Parsed: 3"
Пример ⁅n="sect"⁆
Давайте обработаем случай, когда формат не соответствует строке:
package 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)
}
Результат выполнения кода:
"Error: expected integer, Items parsed: 0"
Смотрите также
-
функцию
fmt.Scan,
которая сканирует данные из стандартного ввода -
функцию
fmt.Sprintf,
которая форматирует строку без вывода -
функцию
fmt.Sscan,
которая сканирует строку без форматирования -
функцию
fmt.Sscanln,
которая сканирует строку до новой строки