Sobes.tech
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")
}