Тип strconv.NumError

Тип strconv.NumError представляет ошибку, возникающую при преобразовании строкового значения в числовое с помощью функций пакета strconv. Этот тип содержит три поля: Func - имя функции, в которой произошла ошибка, Num - строка, которую пытались преобразовать, и Err - основная причина ошибки (обычно strconv.ErrSyntax или strconv.ErrRange).

Синтаксис

gotype NumError struct {
  Func string
  Num  string
  Err  error
}

Пример

Давайте попробуем преобразовать строку, содержащую нечисловые символы, и обработаем ошибку типа strconv.NumError:

gopackage main

import (
  "fmt"
  "strconv"
)

func main() {
  _, err := strconv.Atoi("abc")
  if err != nil {
    if numErr, ok := err.(*strconv.NumError); ok {
      fmt.Println("Func:", numErr.Func)
      fmt.Println("Num:", numErr.Num)
      fmt.Println("Err:", numErr.Err)
    }
  }
}

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

go"Func: Atoi"
"Num: abc"
"Err: syntax error"

Пример

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

gopackage main

import (
  "fmt"
  "strconv"
)

func main() {
  _, err := strconv.ParseInt("9999999999999999999", 10, 64)
  if err != nil {
    if numErr, ok := err.(*strconv.NumError); ok {
      fmt.Println("Func:", numErr.Func)
      fmt.Println("Num:", numErr.Num)
      fmt.Println("Err:", numErr.Err)
    }
  }
}

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

go"Func: ParseInt"
"Num: 9999999999999999999"
"Err: value out of range"

Пример

Давайте проверим, является ли ошибка именно ошибкой синтаксиса, с помощью сравнения с константой strconv.ErrSyntax:

gopackage main

import (
  "fmt"
  "strconv"
)

func main() {
  _, err := strconv.ParseFloat("1.2.3", 64)
  if err != nil {
    if numErr, ok := err.(*strconv.NumError); ok {
      if numErr.Err == strconv.ErrSyntax {
        fmt.Println("This is a syntax error")
      }
    }
  }
}

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

go"This is a syntax error"

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

  • константу strconv.ErrSyntax,
    которая указывает на синтаксическую ошибку в строке
  • константу strconv.ErrRange,
    которая указывает на выход числа за допустимый диапазон
  • функцию strconv.Atoi,
    которая преобразует строку в целое число
  • функцию strconv.ParseInt,
    которая преобразует строку в целое число с указанием системы счисления