Введение
Лаборатория Slices предназначена для проверки ваших знаний о типе данных среза в Go. Срезы представляют собой более мощный интерфейс к последовательностям, чем массивы, и эта лаборатория поможет вам понять, как их использовать.
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
и оператор среза.