Функция context.Background
Функция context.Background создает корневой контекст,
который служит отправной точкой для всех контекстов в программе.
Она возвращает пустой контекст, который никогда не отменяется и не имеет
никаких значений. Этот контекст обычно используется в функции main,
при инициализации серверов, а также в тестах, где требуется контекст,
но нет родительского контекста для наследования.
Синтаксис
ctx := context.Background()
Функция не принимает никаких параметров и возвращает контекст типа
context.Context, который можно использовать как базовый для
создания дочерних контекстов с помощью функций
context.WithCancel, context.WithTimeout и других.
Пример
Давайте создадим корневой контекст и передадим его в функцию, которая выводит значение ключа:
package main
import (
"context"
"fmt"
)
func main() {
ctx := context.Background()
printMessage(ctx)
}
func printMessage(ctx context.Context) {
fmt.Println("Context is working")
}
Результат выполнения кода:
"Context is working"
Пример
Давайте используем context.Background для создания дочернего
контекста с отменой и запустим горутину, которая завершится по сигналу:
package main
import (
"context"
"fmt"
"time"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
go worker(ctx)
time.Sleep(2 * time.Second)
cancel()
time.Sleep(500 * time.Millisecond)
fmt.Println("Main done")
}
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Worker stopped")
return
default:
fmt.Println("Working...")
time.Sleep(500 * time.Millisecond)
}
}
}
Результат выполнения кода:
"Working..."
"Working..."
"Working..."
"Worker stopped"
"Main done"
Смотрите также
-
функцию
context.TODO,
которая создает контекст для временного использования -
функцию
context.WithCancel,
которая создает контекст с функцией отмены -
функцию
context.WithTimeout,
которая создает контекст с таймаутом -
тип
context.Context,
который является интерфейсом для работы с контекстами