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("პროგრამა დასრულდა")
}