golang make slice

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

reymundo_schulist

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

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


Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp Pocket

6 ответов

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

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

Срезы могут быть созданы с помощью встроенной функции 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


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

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

Пример использования 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]


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

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

Срезы срезов

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

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 , год назад

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


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

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

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


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

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

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