Функция context.Background

Функция context.Background создает корневой контекст, который служит отправной точкой для всех контекстов в программе. Она возвращает пустой контекст, который никогда не отменяется и не имеет никаких значений. Этот контекст обычно используется в функции main, при инициализации серверов, а также в тестах, где требуется контекст, но нет родительского контекста для наследования.

Синтаксис

goctx := context.Background()

Функция не принимает никаких параметров и возвращает контекст типа context.Context, который можно использовать как базовый для создания дочерних контекстов с помощью функций context.WithCancel, context.WithTimeout и других.

Пример

Давайте создадим корневой контекст и передадим его в функцию, которая выводит значение ключа:

gopackage main

import (
  "context"
  "fmt"
)

func main() {
  ctx := context.Background()
  printMessage(ctx)
}

func printMessage(ctx context.Context) {
  fmt.Println("Context is working")
}

Результат выполнения кода:

go"Context is working"

Пример

Давайте используем context.Background для создания дочернего контекста с отменой и запустим горутину, которая завершится по сигналу:

gopackage 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)
    }
  }
}

Результат выполнения кода:

go"Working..."
"Working..."
"Working..."
"Worker stopped"
"Main done"

Смотрите также

  • функцию context.TODO,
    которая создает контекст для временного использования
  • функцию context.WithCancel,
    которая создает контекст с функцией отмены
  • функцию context.WithTimeout,
    которая создает контекст с таймаутом
  • тип context.Context,
    который является интерфейсом для работы с контекстами