Sobes.tech
Junior — Middle

როგორ შეიძლება დადგინდეს, ვინ ინიცირებს მიმდინარე კონტექსტის გაუქმებას?

sobes.tech AI

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

Go-ში, შეუძლებელია პირდაპირ განსაზღვრო, ვინ დაიწყო მიმდინარე კონტექსტის გაუქმება, რადგან კონტექსტი არ ინახავს ინფორმაციას გაუქმების ინიციატორის შესახებ.

თუმცა, შესაძლებელია:

  • გამოიყენოთ სხვადასხვა კონტექსტები სხვადასხვა გაუქმების წყაროებით (მაგალითად, context.WithCancel, context.WithTimeout, context.WithDeadline), რათა გაიგოთ გაუქმების მიზეზი კონტექსტის ტიპის მიხედვით.
  • გადმოსცეთ დამატებითი ინფორმაცია context.WithValue-ის საშუალებით, რათა იდენტიფიციროთ ინიციატორი.

გაუქმების მიზეზის შემოწმების მაგალითი:

select {
case <-ctx.Done():
    err := ctx.Err()
    if err == context.Canceled {
        fmt.Println("ხელით გაუქმება")
    } else if err == context.DeadlineExceeded {
        fmt.Println("ვადამიწურა")
    }
}

სწორად განსაზღვრისთვის, თუ ვინ დაიწყო გაუქმება, საჭიროა საკუთარი მექანიზმის შექმნა ამ ინფორმაციას გადასაცემად.