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("Программа аяктады")
}