НАЙКРАЩИЙ САЙТ ДЛЯ ВЕБ-РОЗРОБНИКІВ
Golang. Уроки для початківців

En

Go Слайси


Go Слайси (фрагменти)

Слайси (фрагменти, зрізи) подібні до масивів, але є більш потужними та гнучкими.

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

Однак, на відміну від масивів, довжина слайса може збільшуватися та зменшуватися на ваш розсуд.

У Go є кілька способів створити слайс:

  • Використання формату []тип даних{значення}
  • Створення слайсу з масиву
  • Використання функції make()

Створіть слайс із []тип даних{значення}

Синтаксис

slice_name := []тип даних{значення}

Поширений спосіб оголошення слайсу такий:

myslice := []int{}

Наведений вище код оголошує порожній слайс довжини 0 та ємності 0.

Скористайтеся цим, щоб ініціалізувати слайс під час оголошення:

myslice := []int{1,2,3}

Наведений вище код оголошує слайс цілих чисел довжиною 3, а також місткістю 3.

У Go є дві функції, які можна використовувати для повернення довжини та місткості слайсу:

  • len() функція - повертає довжину слайса (кількість елементів у слайсі)
  • cap() функція - повертає ємність слайса (кількість елементів, до яких слайс може збільшитися або зменшитися)

Приклад

У цьому прикладі показано, як створити слайси за допомогою формату []тип даних{значення}:

package main
import ("fmt")

func main() {
  myslice1 := []int{}
  fmt.Println(len(myslice1))
  fmt.Println(cap(myslice1))
  fmt.Println(myslice1)

  myslice2 := []string{"Go", "Slices", "Are", "Powerful"}
  fmt.Println(len(myslice2))
  fmt.Println(cap(myslice2))
  fmt.Println(myslice2)
}

Результат:

0
0
[]
4
4
[Go Slices Are Powerful]
Спробуйте самі »

У наведеному вище прикладі ми бачимо, що в першому слайсі (myslice1) фактичні елементи не вказані, тому і довжина, і місткість слайсу будуть нульовими. У другому слайсі (myslice2) вказуються елементи, і довжина, і місткість дорівнюють кількості вказаних фактичних елементів.


Створення слайсу з масиву

Ви можете створити слайс, розрізавши масив:

Синтаксис

var myarray = [length]datatype{values} // Масив
myslice := myarray[start:end] // Слайс зроблений з масиву

Приклад

У цьому прикладі показано, як створити слайс із масиву:

package main
import ("fmt")

func main() {
  arr1 := [6]int{10, 11, 12, 13, 14,15}
  myslice := arr1[2:4]

  fmt.Printf("myslice = %v\n", myslice)
  fmt.Printf("length = %d\n", len(myslice))
  fmt.Printf("capacity = %d\n", cap(myslice))
}

Результат:

myslice = [12 13]
length = 2
capacity = 4
Спробуйте самі »

У наведеному вище прикладі myslice – це слайс довжиною 2. Він складається з arr1, який є масивом із довжиною 6.

Слайс починається з другого елемента масиву, який має значення 12. Слайс може зростати до кінця масиву. Це означає, що ємність слайсу становить 4.

Якби myslice починався з елемента 0, місткість слайсу становила би 6.


Створити слайс за допомогою функції make()

Функція make() також може використовуватися для створення слайсу.

Синтаксис

slice_name := make([]type, length, capacity)

Примітка: Якщо параметр capacity не визначено, він дорівнюватиме length.

Приклад

У цьому прикладі показано, як створити фрагменти за допомогою функції make():

package main
import ("fmt")

func main() {
  myslice1 := make([]int, 5, 10)
  fmt.Printf("myslice1 = %v\n", myslice1)
  fmt.Printf("length = %d\n", len(myslice1))
  fmt.Printf("capacity = %d\n", cap(myslice1))

  // з пропущеною ємністю
  myslice2 := make([]int, 5)
  fmt.Printf("myslice2 = %v\n", myslice2)
  fmt.Printf("length = %d\n", len(myslice2))
  fmt.Printf("capacity = %d\n", cap(myslice2))
}

Результат:

myslice1 = [0 0 0 0 0]
length = 5
capacity = 10
myslice2 = [0 0 0 0 0]
length = 5
capacity = 5
Спробуйте самі »