🔥 FUNCIONES Y BLOQUEO

Relación entre funciones y bloqueo en Go

En el desarrollo con Go, es fundamental comprender cómo configurar y invocar funciones en Go para evitar problemas de rendimiento. Las funciones en GO son bloques de código reutilizables que permiten organizar y estructurar el programa de manera eficiente. Sin embargo, cuando una función realiza una operación que toma tiempo, como leer un archivo grande, puede provocar un bloqueo en la ejecución del programa.

A continuación, se presenta un ejemplo de función bloqueante en Golang que simula la lectura de un archivo de texto extenso:

package main

import (
    "fmt"
    "time"
)

func leerArchivo() string {
    time.Sleep(time.Second * 5)
    return "Datos del archivo"
}

func main() {
    datos := leerArchivo()
    fmt.Println(datos)
}

En este caso:

  • La función leerArchivo() retorna un string tras una espera de 5 segundos usando time.Sleep(time.Second * 5).
  • Durante ese tiempo, el programa queda bloqueado y no continúa hasta que la función termina.
  • Este comportamiento es común en operaciones de entrada/salida o tareas que requieren mucho tiempo.

Go ofrece mecanismos como goroutines y canales para trabajar con first-class functions, closures & more, permitiendo ejecutar funciones de manera concurrente y así evitar que el programa se detenga por completo durante operaciones lentas.


Conclusión

Comprender cómo las funciones pueden bloquear la ejecución en Go es esencial para escribir programas eficientes y escalables. Utilizar correctamente las herramientas del lenguaje permite evitar cuellos de botella y aprovechar al máximo la concurrencia que ofrece Go.


Cuestionario de repaso

  1. ¿Qué sucede cuando una función en Go realiza una operación que toma mucho tiempo?
  2. ¿Cómo se puede evitar el bloqueo de la ejecución en Go al trabajar con funciones?
  3. ¿Para qué sirve la instrucción time.Sleep en el ejemplo presentado?
  4. ¿Por qué es importante reutilizar funciones en el desarrollo con Go?
  5. ¿Qué mecanismos ofrece Go para ejecutar funciones de manera concurrente?