¿Qué son los Slices en Go?

En Go, además de los Arrays que poseen un tamaño fijo, existen los Slices que tienen un tamaño variable.

En Go, (el lenguaje que utilizamos para nuestra App de cursos en EDteam), a diferencia de los Arrays que poseen un tamaño fijo, los Slices representan una secuencia de tamaño variable de elementos del mismo tipo, es decir poseen un tamaño dinámico. 

Los Slices se caracterizan por: 

  1. Tener un apuntador a un Array
  2. Su tamaño es dinámico
  3. Poseer una capacidad

Un slice se crea al especificar dos indices, un limite bajo y uno alto separados por dos puntos, foo[limite_bajo:limite_alto] lo que seleccionará un rango que incluirá el primer elemento especificado por el limite bajo hasta el elemento del limite alto, pero excluyendo este último.


package main

import (
	"fmt"
)

func main() {
	// Array
	cursos := [6]string{"Go","CSS","Javascript","Vue","Bases de Datos"}
	// Slice
	var frontend []string = cursos[1:4]
	fmt.Println(frontend)
}

El ejemplo anterior cursos[1:4] crea un slice basado en el array cursos que inicia desde el indice 1 hasta el indice 3, así que el slice frontend ahora posee los valores [CSS Javascript Vue]

Al crear el Slice se puede omitir el límite bajo o alto, en tal caso se usarán los valores predeterminados, los cuales son cero para el límite bajo y la longitud del Slice para el límite alto


package main

import (
	"fmt"
)

func main() {
	
	// Array
	cursos := [6]string{"CSS","Javascript","Vue","Go","Bases de Datos"}
	
	frontend := cursos[:3]
	fmt.Println(frontend)

	backend := cursos[3:]
	fmt.Println(backend)
}

La salida del programa anterior es:


[CSS Javascript Vue]
[Go Bases de Datos ]

Un Slice también puede ser creado de forma literal:


package main

import (
	"fmt"
)

func main() {
	profesores := []string{"Alvaro", "Alexys", "Beto", "Daniel"}
	fmt.Println(profesores)
}

O a través de la función make(tipo, tamaño, capacidad), la cuál asigna un Array a cero y retorna un Slice que hace referencia a ese Array, sin embargo el parámetro de capacidad es opcional.


package main

import (  
    "fmt"
)

func main() {  
    numeros := make([]int, 3, 3)
    fmt.Println(numeros)
}

Cuando se crea un Slice con la función make por defecto los valores se ponen a cero, por lo tanto el programa anterior generará la salida [0 0 0].

Puedes aprender más de este lenguaje en el Curso Go Desde Cero.

Sigue leyendo