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