Sobes.tech
Middle

რა შესაძლებლობები აქვს შვილობილი მონაცემთა კონტექსტის შექმნას Go-ში?

sobes.tech AI

პასუხი AI-სგან

შექმენით შვილობილი კონტექსტი (context.WithCancel, context.WithDeadline, context.WithTimeout, context.WithValue) შემდეგი შესაძლებლობებით:

  • გაუქმება: საშუალებას აძლევს გაუქმდეს შვილობილი კონტექსტში დაწყებული ოპერაციები, არ ზემოქმედებს მშობელზე. ეს ხდება კონტექსტის შექმნისას დაბრუნებული გაუქმების ფუნქციის გამოძახებით.
  • დედლაინი / დროის ზღვარი: შეზღუდავს ოპერაციების შესრულების დროს. თუ ოპერაციის დასრულებამდე დრო ამოიწურა, კონტექსტი ავტომატურად გაუქმდება.
  • მნიშვნელობების გადაცემა: საშუალებას აძლევს გადმოსცეთ სპეციფიკური მნიშვნელობები მოთხოვნის ან ოპერაციისთვის ქვედა ფუნქციათა ჯაჭვში (მაგ., მოთხოვნის იდენტიფიკატორი, ავტორიზაციის მონაცემები), ფუნქციების სიგნატურების შეცვლის გარეშე.
  • ჰიერქია: ქმნის ჰიერქული სტრუქტურას კონტექსტების. მშობელი კონტექსტის გაუქმება ავტომატურად გაუქმებს ყველა შვილობილი კონტექსტს.
package main

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

func main() {
	// მშობელი კონტექსტი, რომელიც გაუქმდება 3 წამში
	parentCtx, cancelParent := context.WithTimeout(context.Background(), 3*time.Second)
	defer cancelParent() // დავრწმუნდეთ, რომ მშობელი კონტექსტი გაუქმდება

	// ქმნით შვილობილი კონტექსტს გაუქმებით
	childCtx, cancelChild := context.WithCancel(parentCtx)
	defer cancelChild() // დავრწმუნდეთ, რომ შვილობილი კონტექსტი გაუქმდება

	// ფუნქცია, რომელიც ელოდება კონტექსტის გაუქმებას
	go func(ctx context.Context) {
		select {
		case <-ctx.Done():
			// ეს ბლოკი შესრულდება, როდესაც კონტექსტი გაუქმდება
			fmt.Println("შვილობილი გორუტა გაუქმებულია:", ctx.Err())
		}
	}(childCtx) // შვილობილი კონტექსტის გადაცემა გორუტაში

	// ხელოვნური დაგვიანება დემონსტრაციისთვის
	time.Sleep(5 * time.Second)

	fmt.Println("პროგრამა დასრულდა")
}