Теория 📔
June 7, 2023

📦 Слайсы, числа и строки

Не люблю предисловия. Начинаем.

Слайсы и массивы

Во-первых Go - это не JavaScript, у нас внутри массива все значения должны быть одного типа. Во-вторых при инициализации массива нужно указать его размер (увеличить его не получится):

var m[7]int

Слайс (aka срез) - это структура go, которая состоит из ссылки на базовый массив и также двух переменных: len (длинна) и cap (ёмкость).

  • array - ссылка на последовательность элементов в массиве
  • len - это то количество элементов, на которое ссылается слайс
  • cap - это количество элементов, лежащего в основе массива
Срез на основе другого среза всё равно ссылается на исходный массив первого

Добавление в слайс

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

Числа

Численных типов в Go достаточно, остановимся на int.

У int в Go есть интересная особенность - его размер зависит от архитектуры машины, на которой запускается код. Компилятор выбирает в какой тип преобразовать int:

  • int64 для 64-разрядной архитектуры
  • int32 для 32-разрядной

В памяти int32 занимает 32 бита (4 байтов), а int 64 занимает 64 бита (8 байтов).

Строки

Строки в Go представляют из себя структуру:

type _string struct {
			elements *byte // underlying bytes
			len      int   // number of bytes
		}
len - количество байт, а не символов

Строки иммутабельны, т.е. при любом изменение создаётся новая строка.

В некоторых кодировках символ может занимать больше одного байта, в таких случаях прохождение по всем элементам строки может вызвать некорректное поведение кода. Чтобы этого избежать, нужно преобразовать строку в слайс рун.

Заключение

Это не полное описание всех тонкостей работы с числами, строками и слайсами в Go. Я написал эту маленькую статью для того, чтобы ты быстро прочитал её перед собеседованием и освежил главные моменты в памяти.