Mam już działający serwer napisany w Go. Główny odpala kilka goroutin, w których realizuje się logika programu. Po tym głównym nie robi nic użytecznego. Po wyjściu głównym program zostanie zamknięty. Metoda, której teraz używam, aby program działał, to po prostu proste wywołanie funkcji fmt.Scanln(). Chciałbym wiedzieć, jak inni trzymają się z dala od wyjścia. Poniżej znajduje się podstawowy przykład. Jakie pomysły lub najlepsze praktyki można tu zastosować?Jak najlepiej utrzymywać długi program Go, działający?
Rozważałem utworzenie kanału i opóźnienie wyjścia z głównego przez odbieranie na tym kanale, ale myślę, że może to być problematyczne, jeśli wszystkie moje goryle staną się nieaktywne w pewnym momencie.
Nota boczna: Na moim serwerze (nie w przykładzie) program nie jest faktycznie podłączony do powłoki, więc nie ma sensu wchodzić w interakcję z konsolą. Na razie działa, ale szukam "prawidłowego" sposobu, zakładając, że istnieje.
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)
}
}
Znalezionych 6 sposobów, aby to - http: // pliutau.com/different-ways-to-block-go-runtime-forever/ – pltvs