Срезы могут быть созданы с помощью встроенной функции make; так можно создавать массивы с динамическим размером.
Функция make создает обнуленный массив и возвращает срез, который ссылается на этот массив.
a := make([]int, 5) // len(a)=5
Чтобы указать вместимость, укажите третий аргумент к make:
b := make([]int, 0, 5) // len(b)=0, cap(b)=5
b = b[:cap(b)] // len(b)=5, cap(b)=5
b = b[1:] // len(b)=4, cap(b)=4
Пример использования make:
package main
import "fmt"
func main() {
a := make([]int, 5)
printSlice("a", a)
b := make([]int, 0, 5)
printSlice("b", b)
c := b[:2]
printSlice("c", c)
d := c[2:5]
printSlice("d", d)
}
func printSlice(s string, x []int) {
fmt.Printf("%s len=%d cap=%d %v\n",
s, len(x), cap(x), x)
}
Вывод:
a len=5 cap=5 [0 0 0 0 0]
b len=0 cap=5 []
c len=2 cap=5 [0 0]
d len=3 cap=3 [0 0 0]
Срезы срезов
Срезы могут содержать данные любого типа, в том числе и другие срезы.
package main
import (
"fmt"
"strings"
)
func main() {
// Создаем доску для крестиков-ноликов.
board := [][]string{
[]string{"_", "_", "_"},
[]string{"_", "_", "_"},
[]string{"_", "_", "_"},
}
// Игроки делают ходы.
board[0][0] = "X"
board[2][2] = "O"
board[1][2] = "X"
board[1][0] = "O"
board[0][2] = "X"
for i := 0; i < len(board); i++ {
fmt.Printf("%s\n", strings.Join(board[i], " "))
}
}
Вывод:
X _ X
O _ X
_ _ O
Читайте также:
- Основы языка Go: литералы срезов
- Основы языка Go: срезы (slices)
- Основы языка Go: размер и вместимость среза
Комментариев нет:
Отправить комментарий