Ho un server di lunga durata scritto in Go. Principali fuochi di diverse goroutine in cui viene eseguita la logica del programma. Dopo quello principale non fa nulla di utile. Una volta uscite principali, il programma si chiuderà. Il metodo che sto usando in questo momento per mantenere il programma in esecuzione è solo una semplice chiamata a fmt.Scanln(). Mi piacerebbe sapere come gli altri impediscono che l'essenziale esca. Di seguito è un esempio di base. Quali idee o migliori pratiche potrebbero essere utilizzate qui?Quanto è meglio mantenere un programma Go long running, in esecuzione?
Ho pensato di creare un canale e ritardare l'uscita di main ricevendo su detto canale, ma penso che potrebbe essere problematico se tutte le mie goroutine diventassero inattive ad un certo punto.
Nota a margine: nel mio server (non nell'esempio), il programma non è in realtà in esecuzione collegato a una shell, quindi non ha proprio senso interagire con la console. Per ora funziona, ma sto cercando il modo "corretto", assumendo che ce ne sia uno.
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)
}
}
ho trovato 6 modi per farlo - http: // pliutau.it/different-ways-to-block-go-runtime-forever/ – pltvs