Middle
Kas ir konteksts Go? Kam tas tiek izmantojams? Kā darbojas laika ierobežojuma atcelšana?
sobes.tech AI
Atbilde no AI
Go valodā context ir pakots un koncepcija operāciju dzīves cikla pārvaldībai, signālu nodošanai par atcelšanu un laika ierobežojumu noteikšanai starp gorutinām.
Galvenie konteksta uzdevumi:
- Operāciju atcelšana (piemēram, laika ierobežojuma vai lietotāja atcelšanas gadījumā),
- Vērtību nodošana (piemēram, pieprasījuma ID) caur izsaukumu ķēdi,
- Laika ierobežojumu (timeout) iestatīšana.
Timeout balstīta atcelšana darbojas šādi:
- Tiek izveidots konteksts ar laika ierobežojumu vai timeout, piemēram,
context.WithTimeout. - Pēc laika beigām, konteksts automātiski tiek atcelts.
- Goroutine, kas klausās šo kontekstu, saņem atcelšanas signālu caur
Done()kanālu. - Goroutine ir jāapstrādā atbilstoši atcelšanai (piemēram, pārtraukt darbu un atbrīvot resursus).
Piemērs:
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
select {
case <-time.After(3 * time.Second):
fmt.Println("operācija pabeigta")
case <-ctx.Done():
fmt.Println("operācija atcelta vai laika limits iztecējis")
}
Šeit operācija tiks pārtraukta pēc 2 sekundēm, ja tā nebeigsies agrāk.