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