package main
import "fmt"
func main() {
// Создаём слайс
numbers := []int{10, 20, 30, 40, 50}
fmt.Println("Слайс:", numbers) // [10 20 30 40 50]
fmt.Println("Длина слайса:", len(numbers)) // 5
// Добавляем элемент
numbers = append(numbers, 60)
fmt.Println("После append:", numbers) // [10 20 30 40 50 60]
fmt.Println("Новая длина:", len(numbers)) // 6
} package main
import "fmt"
func main() {
// Полная инициализация
numbers := []int{10, 20, 30, 40, 50}
fmt.Println("Полная инициализация:", numbers)
// Пустой слайс
empty := []int{}
fmt.Println("Пустой слайс:", empty, "длина:", len(empty))
// Слайс строк
names := []string{"Alice", "Bob", "Charlie"}
fmt.Println("Слайс строк:", names)
} package main
import "fmt"
func main() {
// Создаём массив
array := [8]int{0, 1, 2, 3, 4, 5, 6, 7}
// Создаём слайс из массива
slice1 := array[2:6] // элементы с индекса 2 по 5 (не включая 6)
fmt.Println("Срез [2:6]:", slice1) // [2 3 4 5]
slice2 := array[:4] // от начала до индекса 3
fmt.Println("Срез [:4]:", slice2) // [0 1 2 3]
slice3 := array[3:] // от индекса 3 до конца
fmt.Println("Срез [3:]:", slice3) // [3 4 5 6 7]
slice4 := array[:] // весь массив
fmt.Println("Срез [:]:", slice4) // [0 1 2 3 4 5 6 7]
} package main
import "fmt"
func main() {
// Добавление одного элемента
numbers := []int{10, 20, 30}
numbers = append(numbers, 40)
fmt.Println("После append одного элемента:", numbers) // [10 20 30 40]
// Добавление нескольких элементов
numbers = append(numbers, 50, 60, 70)
fmt.Println("После append нескольких:", numbers) // [10 20 30 40 50 60 70]
// Добавление другого слайса (с ...)
other := []int{80, 90}
numbers = append(numbers, other...)
fmt.Println("После append слайса:", numbers) // [10 20 30 40 50 60 70 80 90]
// Добавление среза массива (с ...)
array := [3]int{100, 200, 300}
numbers = append(numbers, array[:]...)
fmt.Println("После append массива:", numbers) // [10 20 30 40 50 60 70 80 90 100 200 300]
} package main
import "fmt"
func main() {
src := []int{10, 20, 30, 40, 50}
dst := []int{0, 0, 0} // слайс из 3 элементов
// Копируем min(len(src), len(dst)) элементов
copied := copy(dst, src)
fmt.Printf("Источник: %v\n", src)
fmt.Printf("Приёмник: %v\n", dst)
fmt.Printf("Скопировано элементов: %d\n", copied) // 3
// Копирование в слайс большей длины
dst2 := []int{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
copied2 := copy(dst2, src)
fmt.Printf("Приёмник2: %v\n", dst2)
fmt.Printf("Скопировано элементов: %d\n", copied2) // 5
} package main
import "fmt"
func main() {
numbers := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
// Срез [low:high]
slice1 := numbers[2:7] // элементы с 2 по 6
fmt.Println("numbers[2:7]:", slice1) // [2 3 4 5 6]
// От начала до high
slice2 := numbers[:5] // элементы с 0 по 4
fmt.Println("numbers[:5]:", slice2) // [0 1 2 3 4]
// От low до конца
slice3 := numbers[3:] // элементы с 3 до конца
fmt.Println("numbers[3:]:", slice3) // [3 4 5 6 7 8 9]
// Весь слайс
slice4 := numbers[:] // все элементы
fmt.Println("numbers[:]:", slice4) // [0 1 2 3 4 5 6 7 8 9]
// Срезы разделяют базовый массив
slice5 := numbers[2:5]
slice5[0] = 999 // изменяем элемент в срезе
fmt.Println("Изменённый срез:", slice5) // [999 3 4]
fmt.Println("Оригинальный слайс:", numbers) // [0 1 999 3 4 5 6 7 8 9]
} package main
import "fmt"
func main() {
// Прямоугольная матрица (все строки одинаковой длины)
matrix := [][]int{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
}
fmt.Println("Прямоугольная матрица:")
for _, row := range matrix {
fmt.Println(row)
}
// Зубчатый массив (строки разной длины)
jagged := [][]int{
{1, 2},
{3, 4, 5},
{6, 7, 8, 9},
{10},
}
fmt.Println("\nЗубчатый массив (jagged array):")
for i, row := range jagged {
fmt.Printf("Строка %d (длина %d): %v\n", i, len(row), row)
}
// Динамическое добавление строк
matrix = append(matrix, []int{10, 11, 12})
fmt.Println("\nПосле добавления строки:")
for _, row := range matrix {
fmt.Println(row)
}
} package main
import (
"cmp"
"fmt"
"slices"
)
func main() {
numbers := []int{3, 1, 4, 1, 5, 9, 2, 6}
names := []string{"Charlie", "Alice", "Bob", "Alice"}
// Сортировка (изменяет слайс на месте)
slices.Sort(numbers)
fmt.Println("Отсортированные числа:", numbers) // [1 1 2 3 4 5 6 9]
// Сортировка строк
slices.Sort(names)
fmt.Println("Отсортированные имена:", names) // [Alice Alice Bob Charlie]
// Поиск элемента
index := slices.Index(numbers, 5)
fmt.Printf("Индекс элемента 5: %d\n", index) // 4
// Проверка наличия элемента
contains := slices.Contains(numbers, 7)
fmt.Printf("Содержит ли 7: %t\n", contains) // false
// Сравнение слайсов
equal := slices.Equal([]int{1, 2, 3}, []int{1, 2, 3})
fmt.Printf("Слайсы равны: %t\n", equal) // true
// Минимальный и максимальный элементы
min := slices.Min(numbers)
max := slices.Max(numbers)
fmt.Printf("Минимум: %d, Максимум: %d\n", min, max) // 1, 9
// Разворот
slices.Reverse(names)
fmt.Println("Развёрнутые имена:", names) // [Charlie Bob Alice Alice]
// Удаление последовательных дубликатов
slices.Sort(names) // сначала сортируем
names = slices.Compact(names)
fmt.Println("Уникальные имена:", names) // [Alice Bob Charlie]
// Двоичный поиск (для отсортированных слайсов)
sortedNumbers := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
pos, found := slices.BinarySearch(sortedNumbers, 5)
fmt.Printf("Позиция 5: %d, найден: %t\n", pos, found) // 4, true
// Кастомная сортировка
type Person struct {
name string
age int
}
people := []Person{
{"Alice", 30},
{"Bob", 25},
{"Charlie", 35},
}
// Сортировка по возрасту
slices.SortFunc(people, func(a, b Person) int {
return cmp.Compare(a.age, b.age)
})
fmt.Println("Отсортированные по возрасту:", people)
}