Las goroutines en Go son funciones que se ejecutan de manera concurrente, permitiendo realizar múltiples tareas al mismo tiempo sin bloquear la ejecución del programa principal. Son ligeras en términos de uso de recursos y son fundamentales para aprovechar la concurrencia en Go.
Las goroutines son una característica clave de Go que permite ejecutar funciones de manera concurrente, de forma asíncrona. Se lanzan utilizando la palabra clave go
antes de una función. Aunque una goroutine se parece a un hilo de ejecución, consume muchos menos recursos y es gestionada por el propio runtime de Go.
Cuando una goroutine se ejecuta, su tarea puede ser pausada o reanudada automáticamente por el scheduler de Go, lo que permite que muchas goroutines se ejecuten de manera eficiente, incluso si se tiene un número limitado de núcleos en el procesador.
Para lanzar una goroutine, simplemente precede una llamada de función con la palabra clave go
. A continuación te muestro la sintaxis básica:
package main
import (
"fmt"
"time"
)
func sayHello() {
fmt.Println("Hello, world!")
}
func main() {
go sayHello() // Lanzar la goroutine
time.Sleep(time.Second) // Esperar para permitir que la goroutine termine
}
En este ejemplo, la función sayHello()
se ejecuta en una goroutine separada. Sin el time.Sleep()
, el programa principal podría finalizar antes de que la goroutine se complete.
package main
import (
"fmt"
"time"
)
func printNumbers() {
for i := 1; i <= 5; i++ {
fmt.Println(i)
time.Sleep(500 * time.Millisecond)
}
}
func main() {
go printNumbers() // Ejecuta la función en una goroutine
fmt.Println("La goroutine se ha iniciado.")
time.Sleep(3 * time.Second) // Esperar a que la goroutine termine
fmt.Println("Programa principal terminado.")
}
También es posible usar goroutines con funciones anónimas:
package main
import (
"fmt"
"time"
)
func main() {
go func() {
fmt.Println("Esta es una goroutine anónima")
}()
time.Sleep(1 * time.Second)
}
Para obtener más información sobre goroutines, visita la documentación oficial de Go.
Jorge García
Fullstack developer