golang make slice

Пользователь

от reymundo_schulist , в категории: Общие вопросы , 4 года назад

Ребята, подскажите, пожалуйста, как в Golang’е делаются слайзы. Сам я что-то так и не смог разобраться. Надеюсь на вашу помощь. Если можно, то лучше побольше примеров.


Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp Pocket

6 ответов

Пользователь

от genoveva , 4 года назад

Срезы могут быть созданы с помощью встроенной функции make; так можно создавать массивы с динамическим размером.

 

Функция make создает обнуленный массив и возвращает срез, который ссылается на этот массив.

 

1
a := make([]int, 5// len(a)=5


Чтобы указать вместимость, укажите третий аргумент к make:

1
2
3
4
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


Пользователь

от genoveva , 4 года назад

Пример использования make:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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]


Пользователь

от newell , 4 года назад

Срезы срезов

Срезы могут содержать данные любого типа, в том числе и другие срезы.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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


Пользователь

от tessie_jacobs , 4 года назад

На хабре почти год назад видел статью – полное руководство по массивам и срезам в Golang. Зайди, почитай, она на русском языке, так что всё должно быть понятно.


Пользователь

от anastacio.hane , 4 года назад

Советую зайти на сайт golangs.org, там есть уроки по голангу соответственно, и там ты найдёшь урок – Срез массива в Golang. На этом сайте всё на русском языке, так что должно быть всё тип-топ.


Пользователь

от reymundo_schulist , 4 года назад

Спасибо большое за объяснения, реальный код и небольшую теорию. Буду сейчас со всем этим ознакамливаться и наконец-таки начну использовать в своём коде.