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

Массив представляет собой набор фиксированного размера элементов одного типа. После создания массива его размер нельзя изменить. Вот пример создания массива целых чисел:

var arr [5]int

Вот несколько примеров функций, которые можно использовать с массивами:

// Create a new array
a := [3]int{1, 2, 3}

// Access an element of the array
val := a[1]

// Get the length of the array
len := len(a)

// Iterate over all elements in the array
for i := 0; i < len; i++ {
    fmt.Println(a[i])
}

// Copy one array to another
a2 := [3]int{}
copy(a2[:], a[:])

// Compare two arrays for equality
isEqual := (a == a2)

В приведенном выше примере мы создали новый массив длины 3 и инициализировали его значениями, используя литерал массива. Мы получили элемент с индексом 1 и сохранили его в переменной val. Мы использовали функцию len(), чтобы получить длину массива. Мы прошлись по всем элементам массива, используя цикл for. Мы создали новый массив a2 той же длины, что и a, и скопировали элементы a в a2 с помощью функции copy(). Мы сравнили a и a2 на равенство, используя оператор ==.

Срез — это динамическая коллекция элементов одного типа. В отличие от массивов, срезы могут динамически увеличиваться или уменьшаться во время выполнения. Вот пример создания среза целых чисел:

var slc []int

Вот несколько примеров функций, которые можно использовать со срезами:

// Create a new empty slice
s := make([]int, 0)

// Append elements to the slice
s = append(s, 1, 2, 3)

// Retrieve an element from the slice
val := s[1]

// Get the length and capacity of the slice
len := len(s)
cap := cap(s)

// Copy one slice to another
s2 := make([]int, len(s))
copy(s2, s)

// Iterate over all elements in the slice
for i, val := range s {
    fmt.Println(i, val)
}

// Remove an element from the slice
s = append(s[:1], s[2:]...)

В приведенном выше примере мы создали новый пустой фрагмент с помощью функции make(). Затем мы добавили к срезу три элемента с помощью функции append(). Мы получили элемент с индексом 1 и сохранили его в переменной val. Мы использовали функции len() и cap(), чтобы получить длину и емкость среза. Затем мы создали новый срез s2 той же длины, что и s, и скопировали элементы s в s2, используя функцию copy(). Мы прошлись по всем элементам среза, используя цикл for и ключевое слово range. Мы удалили элемент с индексом 1 из слайса, используя функцию append() и синтаксис слайса.

Карта — это набор пар ключ-значение. Каждый ключ в карте должен быть уникальным и иметь один и тот же тип, а значения, связанные с каждым ключом, могут быть любого типа. Вот пример создания карты строк в целые числа:

var m map[string]int

Вот несколько примеров функций, которые можно использовать с картами:

// Create a new empty map
m := make(map[string]int)

// Add a key-value pair to the map
m["one"] = 1

// Retrieve the value associated with a key
val := m["one"]

// Check if a key exists in the map
_, ok := m["two"]
if !ok {
    fmt.Println("Key 'two' does not exist")
}

// Remove a key-value pair from the map
delete(m, "one")

// Iterate over all key-value pairs in the map
for key, val := range m {
    fmt.Println(key, val)
}

В приведенном выше примере мы создали новую пустую карту с помощью функции make(). Затем мы добавили к карте пару ключ-значение, используя нотацию с квадратными скобками. Мы получили значение, связанное с ключом «один», и сохранили его в переменной val. Мы проверили, существует ли на карте ключ 'two', используя идиому с запятой, которая возвращает логическое значение, указывающее, существует ли ключ или нет. Затем мы удалили пару ключ-значение, связанную с ключом «один», используя функцию delete(). Наконец, мы прошлись по всем парам ключ-значение на карте, используя цикл for и ключевое слово range.

Ниже приведены подробные примеры, демонстрирующие использование различных типов коллекций в Go:

// creating an array
var arr [5]int
arr[0] = 1
arr[1] = 2
arr[2] = 3
arr[3] = 4
arr[4] = 5

// creating a slice
slc := make([]int, 3, 5)
slc[0] = 1
slc[1] = 2
slc[2] = 3
slc = append(slc, 4, 5)

// creating a map
m := make(map[string]int)
m["one"] = 1
m["two"] = 2
m["three"] = 3

В приведенном выше примере мы создали массив целых чисел длиной 5 и присвоили значения каждому элементу. Мы также создали срез целых чисел с начальной длиной 3 и емкостью 5, присвоили значения первым трем элементам и добавили к срезу еще два элемента. Наконец, мы создали карту строк в целые числа и присвоили значения каждому ключу. В Go мы можем создать массив и срез с помощью встроенной функции make().

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