Sobes.tech
Middle

Чӣ имкониятҳоро фароҳам меорад эҷоди контексти додаҳои фарзанда дар Go?

sobes.tech AI

Ҷавоб аз AI

context.WithCancel, context.WithDeadline, context.WithTimeout, context.WithValue колдонуу менен түзүлгөн балдар контексти төмөнкү мүмкүнчүлүктөрдү камсыздайт:

  • Жокко чыгаруу: Бул балдар контекстинде ишке ашырылган операцияларды ата-эне контекстине таасир этпестен жокко чыгара алат. Бул контекст түзүлгөндө кайтарылган жокко чыгаруу функциясын чакыруучу аркылуу ишке ашырылат.
  • Убакыт / DeadLine: Операциялардын иштөө убактысын чектейт. Эгер убакыт аяктагандан мурун операция аякса, контекст автоматтык түрдө жокко чыгарыла турган болот.
  • Маалыматтарды өткөрүү: Талап же операция үчүн өзгөчө маанилерди төмөнкү функциялардын чынжырына өткөрүүгө мүмкүндүк берет (мисалы, талаптын идентификатору, аутентификация маалыматтары), функциялардын белгилерин өзгөртпөстөн.
  • Иерархия: Контексттердин иерархиялык түзүлүшүн түзөт. Ата-эне контекстин жокко чыгаруу автоматтык түрдө анын бардык балдар контексттерин жокко чыгарат.
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("Балдар goroutine жокко чыгарылды:", ctx.Err())
		}
	}(childCtx) // Балдар контекстин goroutine'га өткөрүү

	// Жасалма кечиктирүү, жокко чыгарууну көрсөтүү үчүн
	time.Sleep(5 * time.Second)

	fmt.Println("Программа аяктады")
}

Бул мисалда, ата-эне контекст 3 секунддан кийин автоматтык түрдө балдар контекстин жокко чыгарат, бул goroutine ишин токтотууга алып келет. Балдар контекстин кол менен cancelChild() чакырып, ата-эне контекстинин убакыт чегинен мурун жокко чыгарыш мүмкүн.