Go / Golang - структуры данных (массивы, срезы и карты)
Массивы
Array
представляет собой набор/последовательность значений одного типа. Массивы в Go
аналогичны массивам на других языках. Давайте посмотрим, как объявить массив в Go, ниже приведен пример:
var value1 [5]int
var value2 [3]string
Вы также можете инициализировать массивы с заранее определенными значениями.
var value1 = [5]int { 11, 22, 33, 44, 55}
value2 := [3]string{ "This is " ,"Golang" , "Blog series"}
//Initializing with short variable declaration operator
Вы можете получить доступ ко всем элементам массива, используя цикл for. Ниже приведен фрагмент кода:
var numArr = [5] int {24,76,45,33,65}
for i:=0; i< len(numArr); i++ {
fmt.Println("Value is :",numArr[i])
}
Выше функция len()
используется для определения размера массивов.
Примечание. Массивы передаются функции как значения. То есть передаем его копию.
Срезы
Slice
в Go очень похож на массив. Массивы имеют фиксированный размер, но срезы имеют динамический размер. Срезы могут удвоить свой текущий размер, чтобы добавить больше значений. Срезы хранят элементы аналогичного типа.
Срезы объявляются также просто как массив, но они не указывают размер. Ниже приведен пример этого:
var sliceValues1 [ ]int
var sliceValues2 [ ]string
Для добавления значений в срез мы используем функцию append()
. Давайте посмотрим фрагмент кода, в котором мы инициализируем фрагмент и добавляем к нему дополнительные значения.
var intSlice = []int {1,2,3,4,5,6,7}
intSlice = append(intSlice,8)
fmt.Println("Length : ", len(intSlice)) /*Prints length of slice*/
fmt.Println("Capacity :" ,cap(intSlice)) /*Prints capacity of slice*/
intSlice = append(intSlice,9,10,11) //You can append multiple values too
fmt.Println(intSlice) //Prints slice after appending multiple values
В приведенном выше фрагменте len()
дает нам текущую длину среза cap()
дает нам его общую емкость.
Мы можем создать фрагмент фрагмента, используя приведенный ниже код:
sliceVal := []int{10,20,30,40,50,60}
sliceVal1 := sliceVal[0:4] // It creates a slice of 10,20,30,40
fmt.Println(sliceVal1)
Важно отметить, что фрагменты передаются по ссылке в Go.
Карты
Maps
в Go используются для хранения пар ключ-значение и не допускают идентичных ключей. Давайте посмотрим, как объявить карту в приведенном ниже фрагменте кода:
var animals map[int]string
В приведенном выше фрагменте ключ имеет тип int, а значение - строковый тип.
Вы должны инициализировать карту при ее объявлении, иначе это будет нулевая карта, и вы не можете добавлять элементы на карту с нулевым значением. Давайте посмотрим, как инициализировать карту в Go.
var animals map[int]string {
1 : "Tiger" ,
2 : "Lion" ,
3 : "Elephant" ,
4 : "Giraffe", //The comma is a must after the last key
}
Карту можно создать с помощью функции make()
. Функция make() создает инициализированную карту. Ниже приведен фрагмент кода для ее создания:
prices := make(map[string]int)
prices["Item1"] = 240
prices["Item2"] = 350
prices["Item3"] = 150
Приведенную выше карту цен можно повторить следующим образом:
for item, price := range prices {
fmt.Println(item , ":>" ,price)
}
Вы можете удалить ключ с помощью встроенной функции delete()
delete(prices, "Item1")
Обратите внимание: Карты - это справочные типы. Поэтому, когда Map назначается переменной, если в переменную вносятся какие-либо изменения, она также изменяет карту.