Tengo un servidor de larga ejecución escrito en Go. Se apaga varios gorutines donde se ejecuta la lógica del programa. Después de eso principal no hace nada útil. Una vez que las salidas principales, el programa se cerrará. El método que estoy usando ahora para mantener el programa en ejecución es solo una simple llamada a fmt.Scanln(). Me gustaría saber cómo otros evitan que salga principal. A continuación se muestra un ejemplo básico. ¿Qué ideas o mejores prácticas podrían usarse aquí?¿Cuál es la mejor forma de mantener un programa Go de larga ejecución?
Consideré crear un canal y retrasar la salida de main al recibir en dicho canal, pero creo que podría ser problemático si todos mis goroutines se vuelven inactivos en algún momento.
Nota al margen: en mi servidor (no en el ejemplo), el programa no se está conectando a un shell, por lo que no tiene sentido interactuar con la consola de todos modos. Por ahora funciona, pero estoy buscando la forma "correcta", suponiendo que haya una.
package main
import (
"fmt"
"time"
)
func main() {
go forever()
//Keep this goroutine from exiting
//so that the program doesn't end.
//This is the focus of my question.
fmt.Scanln()
}
func forever() {
for ; ; {
//An example goroutine that might run
//indefinitely. In actual implementation
//it might block on a chanel receive instead
//of time.Sleep for example.
fmt.Printf("%v+\n", time.Now())
time.Sleep(time.Second)
}
}
me encontró 6 maneras de hacerlo - http: // pliutau.com/different-ways-to-block-go-runtime-forever/ – pltvs