📦 Слайсы, числа и строки
Не люблю предисловия. Начинаем.
Слайсы и массивы
Во-первых Go - это не JavaScript, у нас внутри массива все значения должны быть одного типа. Во-вторых при инициализации массива нужно указать его размер (увеличить его не получится):
var m[7]int
Слайс (aka срез) - это структура go, которая состоит из ссылки на базовый массив и также двух переменных: len (длинна) и cap (ёмкость).
- array - ссылка на последовательность элементов в массиве
- len - это то количество элементов, на которое ссылается слайс
- cap - это количество элементов, лежащего в основе массива
Срез на основе другого среза всё равно ссылается на исходный массив первого
Добавление в слайс
Когда выполняется операция добавления элемента в срез, Go проверяет, достаточно ли емкости среза для добавления элемента. Если емкости недостаточно, Go создает новый массив большего размера, копирует в него существующие элементы и добавляет новые элементы. Затем создается новый срез, который ссылается на этот новый массив.
Числа
Численных типов в Go достаточно, остановимся на int.
У int в Go есть интересная особенность - его размер зависит от архитектуры машины, на которой запускается код. Компилятор выбирает в какой тип преобразовать int:
В памяти int32 занимает 32 бита (4 байтов), а int 64 занимает 64 бита (8 байтов).
Строки
Строки в Go представляют из себя структуру:
type _string struct { elements *byte // underlying bytes len int // number of bytes }
len - количество байт, а не символов
Строки иммутабельны, т.е. при любом изменение создаётся новая строка.
В некоторых кодировках символ может занимать больше одного байта, в таких случаях прохождение по всем элементам строки может вызвать некорректное поведение кода. Чтобы этого избежать, нужно преобразовать строку в слайс рун.
Заключение
Это не полное описание всех тонкостей работы с числами, строками и слайсами в Go. Я написал эту маленькую статью для того, чтобы ты быстро прочитал её перед собеседованием и освежил главные моменты в памяти.