Unetway

Go - Slices

Go Slice - это абстракция над массивом Go. Go Array позволяет вам определять переменные, которые могут содержать несколько элементов данных одного и того же типа, но он не предоставляет встроенного метода для динамического увеличения его размера или получения собственной подматрицы. Ломтики преодолевают это ограничение. Он предоставляет множество функций утилиты, требуемых для массива, и широко используется в программировании Go.

Определение среза

Чтобы определить срез, вы можете объявить его как массив без указания его размера. Кроме того, вы можете использовать функцию make для создания среза.

var numbers []int /* a slice of unspecified size */
/* numbers == []int{0,0,0,0,0}*/
numbers = make([]int,5,5) /* a slice of length 5 and capacity 5*/

Функции len () и cap ()

Срез - это абстракция над массивом. Он фактически использует массивы в качестве базовой структуры. Функция len () возвращает элементы, представленные в срезе, где функция cap () возвращает емкость среза (т. Е. Сколько элементов он может разместить). В следующем примере объясняется использование slice

package main

import "fmt"

func main() {
   var numbers = make([]int,3,5)
   printSlice(numbers)
}
func printSlice(x []int){
   fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}

Nil slice

Если разрез объявлен без ввода, то по умолчанию он инициализируется как нуль. Его длина и емкость равны нулю.

package main

import "fmt"

func main() {
   var numbers []int
   printSlice(numbers)
   
   if(numbers == nil){
      fmt.Printf("slice is nil")
   }
}
func printSlice(x []int){
   fmt.Printf("len = %d cap = %d slice = %v\n", len(x), cap(x),x)
}

Subslicing

Slice позволяет определить нижнюю границу и верхнюю границу, чтобы получить ее часть, используя [нижняя граница: верхняя граница] . 

Функции append () и copy ()

Можно увеличить емкость среза с помощью функции append () . Используя функцию copy () , содержимое среза источника копируется в целевой срез.