Sobes.tech
Middle

Ի՞նչ է կոնտեքստը Go-ում: Ինչու է օգտագործվում: Ինչպես է աշխատում ժամանակային սահմանափակությամբ չեղարկումը?

sobes.tech AI

Պատասխան AI-ից

Go-ում, context-ը մի փաթեթ և հասկացողություն է գործողությունների կյանքի տևողությունը կառավարելու, չեղարկման ազդանշաններ փոխանցելու և ժամանակային սահմաններ սահմանելու համար գորուտինների միջև:

Կոնտեքստի հիմնական խնդիրները՝

  • գործողությունների չեղարկում (օրինակ՝ ժամանակի ավարտ կամ օգտագործողի կողմից չեղարկում),
  • արժեքների փոխանցում (օրինակ՝ հարցման ID) զանգվածային կանչերի միջով,
  • ժամանակային սահմանների սահմանում (timeout-ներ):

Ժամանակային սահմանով չեղարկումը աշխատում է այսպես՝

  1. Ստեղծվում է կոնտեքստ ժամանակային սահմանով կամ timeout-ով, օրինակ՝ context.WithTimeout:
  2. Ժամանակի ավարտից հետո, կոնտեքստը ավտոմատ կերպով չեղարկվում է:
  3. Այս կոնտեքստը լսող գորուտին ստանում է չեղարկման ազդանշան Done() ալիքի միջոցով:
  4. Գորուտին պետք է ճիշտ կերպով կառավարի չեղարկումը (օրինակ՝ աշխատանքը դադարեցնել և ռեսուրսները ազատել):

Օրինակ՝

ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()

select {
case <-time.After(3 * time.Second):
    fmt.Println("գործողությունը ավարտվեց")
case <-ctx.Done():
    fmt.Println("գործողությունը չեղարկվեց կամ ժամանակը լրացավ")
}

Այստեղ գործողությունը կդադարեցվի 2 վայրկյան անց, եթե նախքան դա չավարտվի։