Middle — Middle+
Kuidas teostad pehme teenuse või rakenduse peatamise, et säilitada praegune olek ja lõpetada ilma andmete kaota?
sobes.tech AI
Vastus AI-lt
Et teha pehme teenuse või rakenduse lõpetamiseks Go keeles kasutatakse tavaliselt operatsioonisüsteemi signaalide (näiteks SIGINT, SIGTERM) töötlemist ja konteksti tühistamist (context.Context). See võimaldab õigesti lõpetada jooksvaid operatsioone, salvestada olekut ja vabastada ressursse.
Näide:
package main
import (
"context"
"fmt"
"os"
"os/signal"
"syscall"
"time"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
// Signaalide töötlemine pehmeks lõpetamiseks
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
go func() {
<-sigs
fmt.Println("Lõpetussignaal received, alustame sulgemist...")
cancel() // Konteksti tühistamine
}()
// Peamise loogika käivitamine tühistamise toetusega
run(ctx)
}
func run(ctx context.Context) {
for {
select {
case <-ctx.Done():
// Salvestada olek, vabastada ressursid
fmt.Println("Oleku salvestamine ja sulgemine")
time.Sleep(2 * time.Second) // simulatsioon
return
default:
// Peamine töö
fmt.Println("Töötamine...")
time.Sleep(1 * time.Second)
}
}
}
See lähenemine võimaldab õigesti lõpetada töö, ilma andmeid kaotamata ja operatsioone jõuga katkestamata.