|
Slices são tipos de dados fundamentais no Go, fornecendo
uma interface mais poderosa para seqüências de matrizes.
|
|
|
|
|
|
|
|
|
|
|
|
Ao contrário das matrizes, os slices são digitados apenas pelos
elementos que eles contêm (não o número de elementos).
Para criar um slice vazio com tamanho diferente de zero, use
o padrão make. Aqui nós fizemos um slice de uma
string de tamanho 3 (inicialmente com
valor zero).
|
s := make([]string, 3)
fmt.Println("emp:", s)
|
|
Podemos definir e obter assim como as matrizes.
|
s[0] = "a"
s[1] = "b"
s[2] = "c"
fmt.Println("set:", s)
fmt.Println("get:", s[2])
|
|
len retorna o tamanho do slice, como esperado.
|
fmt.Println("len:", len(s))
|
|
Além destas operações básicas, os slices suportam
muito mais, o que os tornam mais ricos do que as matrizes.
Uma é o padrão append, na qual retorna um slice
contendo um ou mais novos valores. Note que precisamos
aceitar um valor de retorno do append assim como podemos
obter um novo valor do slice.
|
s = append(s, "d")
s = append(s, "e", "f")
fmt.Println("apd:", s)
|
|
Slices também podem ser copiados. Aqui nós criamos um
slice vazio c do mesmo tamanho que s e copiamos
o s no c.
|
c := make([]string, len(s))
copy(c, s)
fmt.Println("cpy:", c)
|
|
Slices suportam um operador "slice" com a sintaxe
slice[min:max]. Por exemplo, este pega um slice
dos elementos s[2], s[3], e s[4].
|
l := s[2:5]
fmt.Println("sl1:", l)
|
|
Esses slices são até (mas excluíndo) s[5].
|
l = s[:5]
fmt.Println("sl2:", l)
|
|
E esses slices são do (e incluindo) s[2].
|
l = s[2:]
fmt.Println("sl3:", l)
|
|
Nós também podemos declarar e inicializar uma variável para o slice
em uma única linha.
|
t := []string{"g", "h", "i"}
fmt.Println("dcl:", t)
|
|
Slices podem ser compostas em estruturas de dados multi-dimensionais.
O tamanho dos slices interiores pode variar, ao contrário das matrizes
multi-dimensionais.
|
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)
}
|