En este módulo, aprenderemos sobre dos estructuras de datos fundamentales en Go: los arreglos y los slices. Estas estructuras son esenciales para manejar colecciones de datos de manera eficiente y flexible.

Arreglos

Definición y Declaración

Un arreglo es una colección de elementos del mismo tipo, con un tamaño fijo que se define en el momento de su declaración.

var arr [5]int // Declara un arreglo de 5 enteros

Inicialización

Puedes inicializar un arreglo en el momento de su declaración:

var arr = [5]int{1, 2, 3, 4, 5}

También puedes dejar que el compilador determine el tamaño del arreglo:

arr := [...]int{1, 2, 3, 4, 5}

Acceso a Elementos

Puedes acceder a los elementos de un arreglo usando índices, que comienzan en 0:

fmt.Println(arr[0]) // Imprime el primer elemento: 1
arr[1] = 10         // Cambia el segundo elemento a 10

Iteración

Puedes iterar sobre los elementos de un arreglo usando un bucle for:

for i := 0; i < len(arr); i++ {
    fmt.Println(arr[i])
}

O usando un bucle range:

for index, value := range arr {
    fmt.Println(index, value)
}

Ejercicio Práctico

Ejercicio 1: Declara un arreglo de 5 enteros, inicialízalo con valores del 1 al 5, y luego imprime cada elemento.

package main

import "fmt"

func main() {
    var arr = [5]int{1, 2, 3, 4, 5}
    for i := 0; i < len(arr); i++ {
        fmt.Println(arr[i])
    }
}

Slices

Definición y Declaración

Un slice es una vista flexible y dinámica de un segmento de un arreglo. A diferencia de los arreglos, los slices no tienen un tamaño fijo.

var s []int // Declara un slice de enteros

Inicialización

Puedes inicializar un slice usando la función make:

s := make([]int, 5) // Crea un slice de 5 enteros inicializados a 0

O puedes crear un slice a partir de un arreglo:

arr := [5]int{1, 2, 3, 4, 5}
s := arr[1:4] // Crea un slice que contiene los elementos 2, 3 y 4

Acceso a Elementos

Al igual que los arreglos, puedes acceder a los elementos de un slice usando índices:

fmt.Println(s[0]) // Imprime el primer elemento del slice
s[1] = 10         // Cambia el segundo elemento del slice a 10

Iteración

Puedes iterar sobre los elementos de un slice de la misma manera que con los arreglos:

for i := 0; i < len(s); i++ {
    fmt.Println(s[i])
}

for index, value := range s {
    fmt.Println(index, value)
}

Capacidad y Longitud

Los slices tienen una longitud y una capacidad. La longitud es el número de elementos en el slice, mientras que la capacidad es el número de elementos en el arreglo subyacente, comenzando desde el primer elemento del slice.

fmt.Println(len(s)) // Imprime la longitud del slice
fmt.Println(cap(s)) // Imprime la capacidad del slice

Añadir Elementos

Puedes añadir elementos a un slice usando la función append:

s = append(s, 6, 7) // Añade los elementos 6 y 7 al slice

Ejercicio Práctico

Ejercicio 2: Crea un slice a partir de un arreglo, añade algunos elementos al slice y luego imprime todos los elementos del slice.

package main

import "fmt"

func main() {
    arr := [5]int{1, 2, 3, 4, 5}
    s := arr[1:4] // Crea un slice que contiene los elementos 2, 3 y 4
    s = append(s, 6, 7) // Añade los elementos 6 y 7 al slice
    for _, value := range s {
        fmt.Println(value)
    }
}

Errores Comunes y Consejos

  • Índices Fuera de Rango: Asegúrate de no acceder a índices fuera del rango del slice o arreglo, ya que esto causará un pánico en tiempo de ejecución.
  • Capacidad del Slice: Cuando uses append, ten en cuenta que si la capacidad del slice no es suficiente, se creará un nuevo arreglo subyacente, lo que puede afectar el rendimiento.

Conclusión

En esta sección, hemos aprendido sobre los arreglos y slices en Go, cómo declararlos, inicializarlos, acceder a sus elementos y cómo iterar sobre ellos. También hemos visto cómo los slices proporcionan una vista flexible y dinámica de los arreglos. Con estos conocimientos, estás listo para manejar colecciones de datos de manera eficiente en tus programas Go.

En el próximo módulo, exploraremos los mapas, otra estructura de datos fundamental en Go.

© Copyright 2024. Todos los derechos reservados