Go - Порезы: Начальное руководство по динамическим массивам

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

Go - Slice

Что такое порез?

Прежде чем мы начнем, давайте расставим все по местам. Представьте, что вы планируете вечеринку (конечно, кодовую вечеринку!). Вам Needed список гостей, но вы не уверены, сколько людей прийдет. Вот где порезы сияют! Они как динамические списки гостей, которые могут увеличиваться или уменьшаться по мере необходимости.

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

Определение пореза

Давайте начнем с создания нашего первого пореза. Существует несколько способов сделать это, так что давайте рассмотрим их по одному.

Метод 1: Использование функции make()

guestList := make([]string, 3)
fmt.Println(guestList) // Вывод: [  ]

В этом примере мы создали порез строк с начальной длиной 3. Это как если бы мы准备了 три пустых стула для нашей вечеринки. Функция make()是我们的派对-планировщик, готовящий место для наших гостей.

Метод 2: Лiteral пореза

guestList := []string{"Alice", "Bob", "Charlie"}
fmt.Println(guestList) // Вывод: [Alice Bob Charlie]

Здесь мы создаем порез и сразу же наполняем его гостями. Это как если бы у нас была готовая VIP-список!

Метод 3: Порез существующего массива

partyRoom := [5]string{"Alice", "Bob", "Charlie", "David", "Eve"}
vipGuests := partyRoom[0:3]
fmt.Println(vipGuests) // Вывод: [Alice Bob Charlie]

В этом случае мы создаем порез из существующего массива. Это как если бы мы выбрали первых三家 osoby из нашей гостиной, чтобы быть на VIP-списке.

Функции len() и cap()

Теперь у нас есть наши списки гостей, давайте поговорим о двух важных функциях: len() и cap().

guestList := make([]string, 3, 5)
fmt.Printf("Длина: %d, Емкость: %d\n", len(guestList), cap(guestList))
// Вывод: Длина: 3, Емкость: 5
  • len()告诉我们, сколько гостей сейчас в нашем списке.
  • cap()告诉我们, сколько гостей наш список может удержать, прежде чем он needs чтобы вырасти.

Представьте len() как количество стульев, уже установленных, а cap() как общее количество стульев доступных в зале для вечеринки.

Пустой порез

Иногда вы можете объявить порез, но не�始化ровать его. Это называется пустой порез.

var emptyList []string
fmt.Println(emptyList == nil) // Вывод: true

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

Подпорез

Подпорез это как создание VIP-зоны на вашей вечеринке. Вы можете выбрать часть существующего пореза, чтобы создать новый.

fullGuestList := []string{"Alice", "Bob", "Charlie", "David", "Eve"}
vipGuests := fullGuestList[1:4]
fmt.Println(vipGuests) // Вывод: [Bob Charlie David]

Здесь мы выбираем гостей с индекса 1 до 3 (помните, конечный индекс не включается) чтобы быть нашими VIPами.

Функции append() и copy()

append()

Функция append() как если бы у вас былouncer, который может добавить новых гостей на вашу вечеринку.

guestList := []string{"Alice", "Bob"}
guestList = append(guestList, "Charlie")
fmt.Println(guestList) // Вывод: [Alice Bob Charlie]

Вы даже можете добавить несколько гостей сразу:

guestList = append(guestList, "David", "Eve")
fmt.Println(guestList) // Вывод: [Alice Bob Charlie David Eve]

copy()

Функция copy() как если бы у вас былparty planner, который может duplicated ваш список гостей.

originalList := []string{"Alice", "Bob", "Charlie"}
newList := make([]string, len(originalList))
copiedElements := copy(newList, originalList)
fmt.Printf("Скопировано %d элементов. Новый список: %v\n", copiedElements, newList)
// Вывод: Скопировано 3 элемента. Новый список: [Alice Bob Charlie]

Таблица методов пореза

Вот удобная таблица, резюмирующая ключевые методы пореза, о которых мы говорили:

Метод Описание Пример
make() Создает порез make([]int, 5)
len() Возвращает длину пореза len(slice)
cap() Возвращает емкость пореза cap(slice)
append() Добавляет элементы к порезу slice = append(slice, 1, 2, 3)
copy() Копирует элементы из одного пореза в другой copy(destSlice, sourceSlice)
Подпорез Создает новый порез из существующего newSlice := slice[1:4]

И вот вы и entered в чудесный мир порезов Go. Помните, что практика делает perfect, так что не бойтесь экспериментировать с этими концепциями. Создавайте свои собственные списки гостей, играйте с добавлением и копированием, и вскоре вы будете резать и нарезать код на Go как профессионал!

Счастливого кодирования и пусть ваши порезы всегда будут идеально подходящими для ваших нужд!

Credits: Image by storyset