логотип PurpleSchool
логотип PurpleSchool

Конвертация строк в числа в Golang

Автор

Олег Марков

Введение

Программирование — это сфера, где мы часто сталкиваемся с задачей конвертации данных из одного формата в другой, и язык Go (или Golang) не является исключением. Сегодня мы сосредоточимся на том, как можно преобразовывать строки в числа в Go. Это важная часть работы с данными, и знание этих техник пригодится, когда вам нужно будет, например, анализировать данные из файлов, интерфейсов или веб-сервисов, которые возвращают числовые значения в текстовом формате.

strconv: ваш главный помощник

Когда речь заходит о конвертации строк в числа в Go, на помощь приходит пакет strconv. Это стандартная библиотека, которая предоставляет различные функции для этого процесса. Давайте рассмотрим несколько ключевых аспектов.

Конвертирование строки в целое число

Первая функция, которую мы рассмотрим — strconv.Atoi. Она используется для преобразования строки в целое число (тип int). Вот как она работает:

package main

import (
    "fmt"
    "strconv"
)

func main() {
    str := "123"
    number, err := strconv.Atoi(str) // Atoi преобразует строку в int
    if err != nil {
        fmt.Println(err)
    } else {
        fmt.Println(number) // Вывод будет: 123
    }
}

Как видите, strconv.Atoi принимает строку str и пытается вернуть эквивалентное целое число. Если входные данные не могут быть корректно преобразованы, функция возвращает ошибку err. Это стандартная практика в Go — всегда проверять ошибку после вызова функций, которые могут её вернуть.

Конвертирование строки в целое число произвольной базы

Если вы работаете с другой системой счисления, например, двоичной или шестнадцатеричной, вам пригодится функция strconv.ParseInt. Она позволяет явно указывать базу, которая используется в строке. Давайте посмотрим на пример:

package main

import (
    "fmt"
    "strconv"
)

func main() {
    str := "7B" // шестнадцатеричная строка
    number, err := strconv.ParseInt(str, 16, 64) // 16 - основание; 64 - размер int
    if err != nil {
        fmt.Println(err)
    } else {
        fmt.Println(number) // Вывод будет: 123
    }
}

Здесь strconv.ParseInt позволяет указать, что строчка str содержит число в шестнадцатеричной системе (база 16), которое мы хотим преобразовать в десятичное число.

Конвертирование строки в число с плавающей запятой

Преобразование строки в число с плавающей запятой выполняется функцией strconv.ParseFloat. Давайте разберём это на примере:

package main

import (
    "fmt"
    "strconv"
)

func main() {
    str := "123.45"
    number, err := strconv.ParseFloat(str, 64) // 64 - требуемая точность
    if err != nil {
        fmt.Println(err)
    } else {
        fmt.Println(number) // Вывод будет: 123.45
    }
}

Функция strconv.ParseFloat превращает строку в число с плавающей запятой. Второй аргумент функции указывает на точность (битов), с которой мы хотим работать. Это может быть 32 или 64 и указывает на float32 или float64 соответственно.

Хитрости и рекомендации

При работе с конвертацией строк в числа важно помнить о нескольких вещах:

  1. Проверка ошибок: всегда проверяйте ошибку, возвращаемую конвертирующей функцией. Это поможет вам избежать неожиданных ситуаций в ваших программах.

  2. Обработка пустых строк: внимательно работайте с пустыми строками. В Go вызов конвертирующей функции на пустой строке вернет ошибку, которую нужно корректно обработать.

  3. Точность: когда вы работаете с числами с плавающей запятой, будьте внимательны к точности и выберите нужный для вас уровень (32 или 64 бита).

  4. Тестирование крайних случаев: всегда тестируйте вашу программу на крайние случаи ввода, такие как очень большие или отрицательные числа.

Заключение

Мы рассмотрели основные методы и функции превращения строк в числа в Go, используя стандартную библиотеку strconv. Это, безусловно, мощный инструмент, который сильно упростит вашу работу с текстовыми и числовыми данными. Понимание и умение правильно использовать эти функции укрепит ваш код и сделает его более надежным и устойчивым к ошибкам. Не забудьте регулярно практиковаться и применять эти знания на практике, чтобы они стали вашей второй натурой. Надеюсь, эта статья была полезной и помогла вам немного глубже погрузиться в мир Go!

Стрелочка влевоРабота с пакетом params в GolangNull, Nil, None, 0 в GoСтрелочка вправо

Все гайды по Golang

Работа с YAML в GolangПреобразование типов в GolangКонвертация структур в JSON в GolangStrconv в GolangИспользование пакета SQLx для работы с базами данных в GolangРазбираемся с SQL в GolangРазделение строк с помощью функции split в GolangSort в GoПоиск и замена строк в Go - GolangИспользование пакета reflect в GolangРабота с PostgreSQL в GoPointers в GolangПарсинг в GoРабота со списками (list) в GolangПреобразование int в string в GolangРабота с числами с плавающей точкой в GolangРабота с полями в GolangИспользование enum в GolangОбработка JSON в GoРабота с cookie в GolangЧтение и запись CSV-файлов в GolangРегистры в GoКэширование данных в GolangПреобразование byte в string в GolangByte в GoИспользование bufio для работы с потоками данных в GolangДобавление данных и элементов (add) в Go
Логирование в Golang. Zap, Logrus, Loki, GrafanaРабота с Docker-контейнерами в GoИспользование pprof в GolangМеханизмы синхронизации в GolangРабота с пакетом S3 в GolangМониторинг Golang приложений с помощью PrometheusОптимизация проектов на GoПаттерны проектирования в GolangМиграции базы данных в GolangОркестрация контейнеров Go с Kubernetes + DockerGjGo Playground и компилятор GolangИспользование go mod init для создания модулей GolangРабота с переменными окружения (env) в GolangКоманда go build в GolangАвтоматизация Golang проектов — CI/CD с GitLab CI и JenkinsОтладка кода в GolangЧтение и использование конфигурации в приложениях на GolangКомпиляция в GolangКак развернуть Go-приложение на облаке AWSАутентификация в Golang
Сетевые протоколы в GoПеременные в GolangЗначения в GolangДженерик %T и его применение в GolangТипы данных в GolangИспользование tls в GolangИспользование tag в структурах GolangSwitch в GoСтроки в GolangРабота с потоками (stream) в GolangSelect в GoРуны в GoРабота с пакетом params в GolangКонвертация строк в числа в GolangNull, Nil, None, 0 в GoНаименования переменных, функций и структур в GoInt в GolangУстановка GolangЧтение и установка HTTP заголовков в GolangMethods в GolangGoLand — IDE для разработки на Golang от JetBrainsОбработка «not found» в GolangFloat в GolangФлаги командной строки в Go (Golang)Запуск внешних команд в GolangОбработка ошибок в GoИспользование defer в GolangЗначения default в GolangГенерация кода в GoФорматирование кода в GolangЧистая архитектура в GolangКаналы (channels) в GolangПолучение body из HTTP запроса в Golang
Открыть базу знаний