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

В Golang определение массивов и срезов может выглядеть одинаково, но у них есть определенные различия, которые вам необходимо знать. Кроме того, вы должны знать, когда использовать массивы и когда использовать фрагменты в вашем коде Go. Цель этого поста — дать вам общее представление о различиях между массивами и срезами в языке программирования Go.

Кроме того, перед запуском любого кода, написанного на Go, вам необходимо загрузить и установить Go на свой локальный компьютер (вы можете загрузить Go на свой локальный компьютер по ссылке ниже)



Массивы в Go

Массивы могут быть определены в Golang, как показано ниже.

arr1 := [3]int {7,9,4}
// array size is 3

Это самый простой способ объявить массив и присвоить его значения в Golang. Но этот метод можно использовать только тогда, когда вы инициализируете переменную внутри функции. Помимо этого, вы можете использовать два других способа объявить массив в своем коде Go.

ex 1:
var arr1 [3]int = [3]int {2,3}

ex 2:
var arr1 = [3]int {1,7,9}

Когда вы объявляете массив, вам необходимо четко определить его размер, а когда вы инициализируете массив, вы можете назначать значения до этого размера.
После того, как вы определите и настроите значения массива, вы можете легко распечатать их, используя «фмт».

ex:
fmt.Println(arr1)

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

ex:
arr1[2] = 6
fmt.Println(arr1)

Слайсы в Go

Вы можете использовать тот же метод, который мы использовали для объявления массива для объявления среза в Golang. Но разница в том, что в фрагментах вам не нужно указывать размер для этого конкретного фрагмента. Но в массивах нам пришлось определять его размер при объявлении.

cities := []string {"London", "NYC", "Colombo", "Tokyo"}
OR
var cities = []string {"London", "NYC", "Colombo", "Tokyo"}
OR
var cities []string = []string {"London", "NYC", "Colombo", "Tokyo"}

Вы можете использовать любой метод из приведенного выше списка, когда объявляете Slice в своем коде Go. Кроме того, вы можете легко распечатать фрагмент с помощью fmt, как показано ниже.

fmt.Println(cities)

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

cities = append(cities, "LA")
fmt.Println(cities)

Это добавит LA в конец исходного фрагмента и обновит его. Затем, когда вы распечатываете исходный срез, он будет выводиться как LA вместе с другими названиями городов.
Но в срезах вы можете использовать встроенную функцию append() для добавления значений и он будет создавать еще один слайс и добавлять значения без перезаписи исходного слайса.

ex:
cities := []string {"London", "NYC", "Colombo", "Tokyo"}
fmt.Println(cities)
addCity := append(cities, "Auckland")
fmt.Println(addCity)
fmt.Println(cities)

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

// output
[London NYC Colombo Tokyo]
[London NYC Colombo Tokyo Auckland]
[London NYC Colombo Tokyo]

Кроме того, вы можете использовать эту функцию добавления непосредственно с fmt.Println(), и она также будет делать то же самое, что и выше.

fmt.Println(append(cities, “Auckland”))

Спасибо за чтение!