Функция fmt.Sscanln

Функция fmt.Sscanln сканирует данные из строки и сохраняет их в переменные, переданные в качестве аргументов. В отличие от fmt.Sscan, она останавливается на первом символе новой строки (\n) или конце строки. Первым параметром функция принимает строку для сканирования, последующие параметры - указатели на переменные, в которые будут сохранены значения.

Синтаксис

gofunc Sscanln(str string, a ...any) (n int, err error)

Пример

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

gopackage main

import "fmt"

func main() {
  str := "10 20 hello"
  var a, b int
  var s string

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

  fmt.Printf("a=%d, b=%d, s=%s, count=%d", a, b, s, n)
}

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

go"a=10, b=20, s=hello, count=3"

Пример

Давайте посмотрим, что происходит, когда строка содержит символ новой строки:

gopackage main

import "fmt"

func main() {
  str := "10 20\n30 40"
  var a, b int

  n, err := fmt.Sscanln(str, &a, &b)
  if err != nil {
    fmt.Println(err)
    return
  }

  fmt.Printf("a=%d, b=%d, count=%d", a, b, n)
}

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

go"a=10, b=20, count=2"

Как видите, функция прочитала только первую строку до символа \n.

Пример

Давайте рассмотрим случай, когда количество аргументов не совпадает с количеством значений в строке:

gopackage main

import "fmt"

func main() {
  str := "10 20 30"
  var a, b int

  n, err := fmt.Sscanln(str, &a, &b)
  if err != nil {
    fmt.Println(err)
    return
  }

  fmt.Printf("a=%d, b=%d, count=%d", a, b, n)
}

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

go"expected 2 items but got 3"

Функция вернула ошибку, так как в строке больше значений, чем переменных для сканирования.

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

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