Александр Гольцман
Типы данных в Golang
Типы данных в Golang (type)
Типы данных в языке программирования Go (или Golang) играют ключевую роль, поскольку Go — это строго типизированный язык. Это значит, что каждая переменная имеет определенный тип, который нельзя просто так изменить. Такой подход помогает избежать многих ошибок и делает код более предсказуемым. В этой статье мы разберем основные типы данных в Go, их особенности и практическое применение.
Основные категории типов данных
В Go предусмотрено несколько категорий типов данных, которые можно разделить на следующие группы:
- Числовые — включают в себя как целые числа, так и числа с плавающей запятой.
- Булевый — логический тип, содержащий значения
true
илиfalse
. - Строки — представляют собой последовательность символов в кодировке UTF-8.
- Срезы и массивы — структуры для хранения данных, схожие, но имеющие различия.
- Карты (map) — удобный способ хранения данных в виде пар "ключ-значение".
- Структуры (struct) — позволяют объединять несколько значений в единую сущность.
- Указатели (pointer) — используются для работы с адресами памяти.
- Интерфейсы (interface) — описывают поведение объектов через набор методов.
- Каналы (channel) — обеспечивают взаимодействие между горутинами.
Давайте подробнее рассмотрим каждый из них.
Числовые типы
В Go есть несколько разновидностей числовых типов:
- Целые числа:
int
,int8
,int16
,int32
,int64
. - Беззнаковые целые числа:
uint
,uint8
,uint16
,uint32
,uint64
. - Числа с плавающей запятой:
float32
,float64
. - Комплексные числа:
complex64
,complex128
. - Дополнительные типы:
byte
(аналогuint8
) иrune
(аналогint32
, используется для хранения символов Unicode).
По умолчанию, если вы объявляете целочисленную переменную без указания типа, Go присваивает ей int
, а для чисел с плавающей запятой используется float64
.
Булевый тип
Булевый тип (bool
) в Go принимает два значения: true
или false
. Он часто применяется в условных выражениях. Например:
isReady := true
if isReady {
fmt.Println("Программа готова к запуску!")
}
Важный момент: в Go нет автоматического приведения типов, поэтому нельзя, например, использовать 1
вместо true
.
Строки
Строки (string
) в Go представляют собой неизменяемую последовательность байтов в кодировке UTF-8. Это означает, что после создания строку нельзя изменить напрямую.
Покажу на примере:
message := "Привет, Golang!"
fmt.Println(len(message)) // Длина строки в байтах
Если вам нужно работать с символами внутри строки, учитывайте, что len()
возвращает количество байтов, а не символов. Чтобы корректно обрабатывать многобайтовые символы, лучше использовать rune
.
Срезы и массивы
В Go есть как массивы, так и более гибкие срезы. Подробнее…
- Массив имеет фиксированный размер:
var arr [3]int = [3]int{1, 2, 3}
- Срез — это динамическая структура, которая может изменяться:
slice := []int{1, 2, 3, 4}
slice = append(slice, 5) // Добавляем элемент
Срезы чаще используются в Go, так как они удобнее и гибче массивов.
Карты (map)
Карты (map
) позволяют хранить данные в формате "ключ-значение". Это мощный инструмент для быстрого поиска данных по ключу. Подробнее…
Создадим карту с возрастами пользователей:
users := map[string]int{
"Алиса": 25,
"Боб": 30,
}
fmt.Println(users["Алиса"]) // 25
Карты очень удобны, если вам нужно быстро находить значения по определенному ключу.
Структуры (struct)
Если вам нужно объединить несколько значений в один объект, используйте struct
.
Пример структуры, описывающей человека:
type Person struct {
Name string
Age int
}
p := Person{Name: "Алиса", Age: 25}
fmt.Println(p.Name) // Алиса
Структуры широко используются при работе с данными, например, в API или базах данных.
Указатели (pointer)
Указатели позволяют ссылаться на переменные в памяти.
Смотрите, как это работает:
var a int = 42
var p *int = &a // Указатель на a
fmt.Println(*p) // 42 (разыменовывание указателя)
Указатели полезны, когда нужно изменять данные внутри функций, не копируя их.
Интерфейсы (interface)
Интерфейсы позволяют описывать поведение объектов через набор методов.
Пример:
type Speaker interface {
Speak() string
}
type Human struct{}
func (h Human) Speak() string {
return "Hello!"
}
var s Speaker = Human{}
fmt.Println(s.Speak()) // Hello!
Интерфейсы помогают писать гибкий код, особенно в больших проектах.
Каналы (channel)
Каналы используются для взаимодействия между горутинами (параллельными процессами).
Пример канала, передающего данные:
ch := make(chan int)
go func() { ch <- 42 }() // Отправляем значение в канал
fmt.Println(<-ch) // Получаем 42
Каналы важны для конкурентного программирования в Go.
Заключение
В этой статье я постарался рассказать о ключевых типах данных в Go и их применении. Мы рассмотрели числа, строки, булевые значения, массивы, срезы, карты, структуры, указатели, интерфейсы и каналы. Понимание этих концепций поможет вам писать более надежный и эффективный код. Если у вас есть вопросы или хочется глубже разобраться в какой-то теме — пробуйте примеры на практике!
Постройте личный план изучения Golang до уровня Middle — бесплатно!
Golang — часть карты развития Backend
100+ шагов развития
30 бесплатных лекций
300 бонусных рублей на счет
Бесплатные лекции
Все гайды по Golang
Лучшие курсы по теме

Основы Golang
Антон Ларичев
Nest.js с нуля
Антон Ларичев