Go Slices: Практическое руководство

GolangGolangBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

Лаборатория Slices предназначена для проверки ваших знаний о типе данных среза в Go. Срезы представляют собой более мощный интерфейс к последовательностям, чем массивы, и эта лаборатория поможет вам понять, как их использовать.

Срезы

Задача, которую необходимо решить в этой лаборатории, - создать и манипулировать срезами в Go. Вам понадобится создать пустой срез с ненулевой длиной, задавать и получать значения в срезе, использовать функцию len для получения длины среза, функцию append для добавления новых значений в срез, функцию copy для копирования среза и оператор среза для получения среза элементов из существующего среза.

Для завершения этой лаборатории вам необходимо иметь базовое понимание синтаксиса Go и типа данных среза. Также вам понадобится быть знакомым с функциями make, append и copy, а также оператором среза.

## Обратите внимание, что хотя срезы имеют другой тип, чем массивы,
## они выводятся аналогично с использованием `fmt.Println`.
$ go run slices.go
emp: [ ]
set: [a b c]
get: c
len: 3
apd: [a b c d e f]
cpy: [a b c d e f]
sl1: [c d e]
sl2: [a b c d e]
sl3: [c d e f]
dcl: [g h i]
2d: [[0] [1 2] [2 3 4]]

## Посетите этот [отличный блог-пост](https://go.dev/blog/slices-intro)
## от команды Go для получения более подробной информации о
## дизайне и реализации срезов в Go.

## Теперь, когда мы рассмотрели массивы и срезы, мы посмотрим на
## другую важную встроенную структуру данных Go: карты.

Ниже представлен полный код:

// _Срезы_ - важный тип данных в Go, предоставляющий
// более мощный интерфейс к последовательностям, чем массивы.

package main

import "fmt"

func main() {

	// В отличие от массивов, срезы типизируются только
	// элементами, которые они содержат (а не количеством элементов).
	// Чтобы создать пустой срез с ненулевой длиной, используйте
	// встроенную функцию `make`. Здесь мы создаем срез
	// из `string` длиной `3` (изначально заполненный нулями).
	s := make([]string, 3)
	fmt.Println("emp:", s)

	// Мы можем задавать и получать значения, как и с массивами.
	s[0] = "a"
	s[1] = "b"
	s[2] = "c"
	fmt.Println("set:", s)
	fmt.Println("get:", s[2])

	// `len` возвращает длину среза, как ожидается.
	fmt.Println("len:", len(s))

	// Кроме этих базовых операций, срезы поддерживают несколько
	// других операций, которые делают их более функциональными, чем
	// массивы. Одна из них - встроенная функция `append`, которая
	// возвращает срез, содержащий одно или несколько новых значений.
	// Обратите внимание, что мы должны принять возвращаемое значение
	// от `append`, так как мы можем получить новый срез.
	s = append(s, "d")
	s = append(s, "e", "f")
	fmt.Println("apd:", s)

	// Срезы также можно `копировать`. Здесь мы создаем пустой
	// срез `c` той же длины, что и `s`, и копируем в `c` из `s`.
	c := make([]string, len(s))
	copy(c, s)
	fmt.Println("cpy:", c)

	// Срезы поддерживают оператор "среза" со следующей синтаксисом:
	// `slice[low:high]`. Например, это получает срез элементов
	// `s[2]`, `s[3]` и `s[4]`.
	l := s[2:5]
	fmt.Println("sl1:", l)

	// Этот срез включает все элементы до (но не включая) `s[5]`.
	l = s[:5]
	fmt.Println("sl2:", l)

	// А этот срез включает все элементы начиная от (и включая) `s[2]`.
	l = s[2:]
	fmt.Println("sl3:", l)

	// Мы также можем объявить и инициализировать переменную для среза
	// в одной строке.
	t := []string{"g", "h", "i"}
	fmt.Println("dcl:", t)

	// Срезы можно составлять в многомерные структуры данных.
	// Длина внутренних срезов может различаться, в отличие от
	// многомерных массивов.
	twoD := make([][]int, 3)
	for i := 0; i < 3; i++ {
		innerLen := i + 1
		twoD[i] = make([]int, innerLen)
		for j := 0; j < innerLen; j++ {
			twoD[i][j] = i + j
		}
	}
	fmt.Println("2d: ", twoD)
}

Резюме

Лаборатория Slices предназначена для проверки ваших знаний о типе данных среза в Go. Завершив эту лабораторию, вы лучше поймете, как создавать и манипулировать срезами в Go, включая то, как задавать и получать значения в срезе, использовать функцию len, функции append и copy и оператор среза.