Sobes.tech
Middle

Milliseid võimalusi pakub lapse andmekonteksti loomine Go-s?

sobes.tech AI

Vastus AI-lt

Loo lapse kontekst, kasutades context.WithCancel, context.WithDeadline, context.WithTimeout, context.WithValue, pakkudes järgmisi võimalusi:

  • Tühistamine: võimaldab tühistada lapse kontekstis käivitatud toimingud, mõjutamata vanemkonteksti. Seda saavutatakse tühistamise funktsiooni väljakutsel, mis tagastatakse konteksti loomisel.
  • Aeg / Dilemma: piirab toimingute täitmise aega. Kui aeg lõpeb enne toimingu lõpetamist, tühistatakse kontekst automaatselt.
  • Väärtuste edastamine: võimaldab edastada spetsiifilisi väärtusi, mis on seotud päringu või toiminguga, allpool funktsioonide ahelas (näiteks päringu identifikaator, autentimisandmed), muutmata funktsioonide signatuure.
  • Hierarhia: loob hierarhilise kontekstistruktuuri. Vanemkonteksti tühistamine tühistab automaatselt kõik selle lapsekontekstid.
package main

import (
	"context"
	"fmt"
	"time"
)

func main() {
	// Vanemkontekst, mis tühistatakse 3 sekundi pärast
	parentCtx, cancelParent := context.WithTimeout(context.Background(), 3*time.Second)
	defer cancelParent() // Tagame, et vanemkontekst tühistatakse

	// Loome lapsekonteksti tühistamisega
	childCtx, cancelChild := context.WithCancel(parentCtx)
	defer cancelChild() // Tagame, et lapsekontekst tühistatakse

	// Funktsioon, mis ootab konteksti tühistamist
	go func(ctx context.Context) {
		select {
		case <-ctx.Done():
			// See plokk täidetakse, kui kontekst tühistatakse
			fmt.Println("Lapse kontekst tühistatud:", ctx.Err())
		}
	}(childCtx) // lapsekonteksti edastamine gorutinale

	// Kunstlik viivitus demonstratsiooniks
	time.Sleep(5 * time.Second)

	fmt.Println("Programm lõppes")
}