В 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, каждая из которых имеет свои преимущества и варианты использования.