Middle
Kādas iespējas sniedz bērnu datu konteksta izveide Go?
sobes.tech AI
Atbilde no AI
Veido bērna kontekstu, izmantojot context.WithCancel, context.WithDeadline, context.WithTimeout, context.WithValue, sniedzot šādas iespējas:
- Atcelšana: ļauj atcelt bērna kontekstā uzsāktās operācijas, neietekmējot vecāku. To panāk, izsaucot atcelšanas funkciju, kas tiek atgriezta konteksta izveides laikā.
- Laika limits / Dēdlaids: ierobežo operāciju izpildes laiku. Ja laiks beidzas pirms operācijas pabeigšanas, konteksts automātiski tiek atcelts.
- Vērtību nodošana: ļauj nodot specifiskas vērtības, kas saistītas ar pieprasījumu vai operāciju, lejup funkciju ķēdē (piemēram, pieprasījuma identifikators, autentifikācijas dati), nemainot funkciju parakstus.
- Hierarhija: izveido hierarhisku kontekstu struktūru. Vecāku konteksta atcelšana automātiski atceļ visus tā bērnu kontekstus.
package main
import (
"context"
"fmt"
"time"
)
func main() {
// Vecāku konteksts, kas tiks atcelts pēc 3 sekundēm
parentCtx, cancelParent := context.WithTimeout(context.Background(), 3*time.Second)
defer cancelParent() // Pārliecināmies, ka vecāku konteksts tiks atcelts
// Izveidojam bērnu kontekstu ar atcelšanu
childCtx, cancelChild := context.WithCancel(parentCtx)
defer cancelChild() // Pārliecināmies, ka bērnu konteksts tiks atcelts
// Funkcija, kas gaida konteksta atcelšanu
go func(ctx context.Context) {
select {
case <-ctx.Done():
// Šis bloks tiks izpildīts, kad konteksts tiks atcelts
fmt.Println("Bērnu gaita atcelta:", ctx.Err())
}
}(childCtx) // nododam bērnu kontekstu gretai
// Mākslīgs aizkaves demonstrācijai
time.Sleep(5 * time.Second)
fmt.Println("Programma pabeigta")
}