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

Strconv в Golang

Автор

Олег Марков

Введение

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

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

Одной из самых распространенных задач в программировании является преобразование строк в числа. В Go для этого предоставляет функции Atoi, ParseInt, ParseUint и ParseFloat. Давайте разберем каждую из них.

Atoi

Функция Atoi используется для преобразования строки в целое число (int). Она возвращает результат преобразования и ошибку, если строка не может быть преобразована в число.

package main

import (
    "fmt"
    "strconv"
)

func main() {
    // Преобразуем строку "123" в число
    num, err := strconv.Atoi("123")
    if err != nil {
        fmt.Println("Ошибка:", err)
    } else {
        fmt.Println("Результат:", num) // Результат: 123
    }
}

Здесь Atoi конвертирует строку "123" в целочисленное значение 123. Если бы строка не содержала числовое представление, была бы возвращена ошибка.

ParseInt и ParseUint

Для более сложных преобразований чисел из строк используются функции ParseInt и ParseUint. ParseInt позволяет работать с отрицательными числами, а ParseUint — только с положительными.

package main

import (
    "fmt"
    "strconv"
)

func main() {
    // Преобразуем строку с основанием 16 в целое число
    num, err := strconv.ParseInt("7B", 16, 32)
    if err != nil {
        fmt.Println("Ошибка:", err)
    } else {
        fmt.Println("Результат:", num) // Результат: 123
    }
}

Здесь ParseInt используется для преобразования строкового представления числа в целое число с основанием 16. Параметр 32 означает, что результат будет целым значением размером 32 бита.

ParseFloat

Функция ParseFloat позволяет преобразовывать строку в число с плавающей точкой. Это особенно полезно при работе с значениями точности.

package main

import (
    "fmt"
    "strconv"
)

func main() {
    // Преобразуем строку в число с плавающей точкой
    num, err := strconv.ParseFloat("3.1415", 64)
    if err != nil {
        fmt.Println("Ошибка:", err)
    } else {
        fmt.Println("Результат:", num) // Результат: 3.1415
    }
}

Здесь строка "3.1415" успешно преобразуется в число 3.1415 типа float64.

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

Другим важным случаем является обратное преобразование — из числа в строку. Для этого в пакете strconv имеются функции Itoa, FormatInt, FormatUint и FormatFloat.

Itoa

Функция Itoa выполняет инверсии функции Atoi, т. е. преобразовывает целое число в строку.

package main

import (
    "fmt"
    "strconv"
)

func main() {
    // Преобразуем число в строку
    str := strconv.Itoa(123)
    fmt.Println("Результат:", str) // Результат: "123"
}

Этот код демонстрирует простое и быстрое преобразование числа в строку.

FormatInt и FormatUint

Для более гибкого форматирования, например, если нужно использовать другое основание счисления, мы можем воспользоваться FormatInt и FormatUint.

package main

import (
    "fmt"
    "strconv"
)

func main() {
    // Форматируем число в строку с основанием 16
    str := strconv.FormatInt(123, 16)
    fmt.Println("Результат:", str) // Результат: "7b"
}

Как видно, FormatInt способен преобразовать число в строку в шестнадцатеричном формате.

FormatFloat

Преобразование чисел с плавающей точкой в строку выполняется с помощью функции FormatFloat, которая позволяет настроить форматирование числа.

package main

import (
    "fmt"
    "strconv"
)

func main() {
    // Форматируем число с плавающей точкой в строку
    str := strconv.FormatFloat(3.1415, 'f', 2, 64)
    fmt.Println("Результат:", str) // Результат: "3.14"
}

В этом случае число 3.1415 форматируется в строку "3.14", используя форматирование с двумя знаками после запятой.

Заключение

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

Стрелочка влевоКонвертация структур в JSON в GolangИспользование пакета SQLx для работы с базами данных в GolangСтрелочка вправо

Все гайды по Golang

Работа с YAML в GolangПреобразование типов в GolangКонвертация структур в JSON в GolangStrconv в GolangИспользование пакета SQLx для работы с базами данных в GolangРазделение строк с помощью функции split в GolangРазбираемся с SQL в GolangSort в GoПоиск и замена строк в Go - GolangИспользование пакета reflect в GolangРабота с PostgreSQL в GoPointers в GolangПарсинг в GoРабота со списками (list) в GolangПреобразование int в string в GolangРабота с числами с плавающей точкой в GolangРабота с полями в GolangИспользование enum в GolangОбработка JSON в GoЧтение и запись CSV-файлов в GolangРабота с cookie в 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
Открыть базу знаний