Previamente hablamos de los arreglos(arrays) en go, en esta entrada veremos una estructura de datos similar a los arrays pero mas flexible.
Los slices no son mas que una estructura de datos dinámica y extensible con la que podemos implementar y manipular colecciones de datos. A diferencia de los arreglos , los slices pueden crecer y/o reducirse conforme lo necesitemos, son indexados y tienen una longitud, mediante las propiedades de capacidad y longitud.
Crear un Slice Vacio
Para declarar un slice , solo basta con declarar el tipo de de datos que va contener el precedido por corchetes.
var sliceEntero []int var sliceString []string
como podemos notar no es necesario declarar el tamaño de la estructura.
Crear un slice con la palabra Make
Los slices pueden ser creados usando la palabra reservada make. Cuando utilizamos make, es posible especificar el tamaño del slice, si especificamos solo el tamaño en automático la capacidad será la misma.
var sliceEntero= make([]int, 40) // el tamaño y la capacidad son los mismos var sliceString = make([]string, 40, 80) // el tamaño y la capacidad son diferentes
Crear un Slice con valores
Es posible crear un slice y que contenga valores de inicio, la forma de declararlos es sencilla; después del tipo de datos de datos, se indica con llaves los valores que contendrá de inicio.
var sliceEntero = []int{1,2,3,4} var sliceString = []string{"durant","irving","harden"}
Agregar Elementos
Agregar elementos a los slice es bastante sencillo, solo basta con usar el metodo append().
veamos un ejemplo donde creamos un slice originalmente de tamaño y capacidad 5 y posteriormente usando append incrementa dinámicamente el tamaño.
package main import "fmt" func main() { //declaramos el slice usando make mislice := make([]int, 2, 5) //asignamos valores a las posiciones declaradas mislice[0] = 1 mislice[1] = 2 fmt.Println("valores iniciales de mi slice:", mislice) fmt.Printf("tamaño es %d capacidad es %d\n", len(mislice), cap(mislice)) //usando append podemos agregar nuevos valores al slice,se agregan al final mislice = append(mislice, 3, 4, 5, 6) fmt.Println("valoes de mi slice despues de usar append:", mislice) fmt.Printf("tamaño es %d capacidad es %d\n", len(mislice), cap(mislice)) }
Acceder a los elementos
Acceder a los elementos es sencillo, solo basta con indicar el numero del índice a recuperar.
var sliceEntero = []int{1,2,3,4} fmt.Println(sliceEntero[0])//imprime el valor en la posición 0
Cambiar el valor de un elemento
Para cambiar el valor de un elemento, basta con indicar el índice del elemento a modificar y asignar el valor.
var sliceString = []string{"durant","irving","harden"} fmt.Printl(sliceString[0])//imprime "durant" sliceString[0] = "griffin" fmt.Printl(sliceString[0])//imprime el nuevo valor "griffin"
Remover Elemento del Slice
En golang no existe una función propia para remover elementos en los slices pero podemos hacer una implementación de manera sencilla, creando una función que remueva un elemento en base al índice.
package main import "fmt" func main() { var sliceString = []string{"durant", "irving", "harden", "griffin", "lamarcus"} fmt.Println(sliceString) sliceString = RemoverPorIndice(sliceString, 3) //imprimirá [durant irving harden lamarcus] fmt.Println(sliceString) } func RemoverPorIndice(s []string, indice int) []string { //con esta instrucción indicamos que cortamos el slice hasta //un elemento antes del deseado y concantenamos con los elementos //siguientes al elemento deseado return append(s[:indice], s[indice+1:]...) }
Continuará…